Seite 1 von 1
QCanvas und gestrechtes Bild
Verfasst: 13. Februar 2007 11:21
von iaby
Hallo zusammen!
Ich schaue mir gerade das folgende Beispiel von Trolltech an:
http://doc.trolltech.com/3.3/scribble-example.html
Ich sitzte jetzt schon eine ganze Weile darüber, aber habe es immer noch nicht hinbekommen, dass ein Bild, das ich dem Programm als Parameter übergebe, "gestrecht" wird. Ich will also, dass das Bild IMMER das ganze Fenster einnimmt, egal wie groß oder klein dies ist. Dafür zusändig müsste ja "void Canvas::resizeEvent( QResizeEvent *e )" sein, aber ich schaff es einfach nicht

Wenn sich jemand die Mühe machen würde und mir nen Tipp geben, wär ich echt super dankbar für
Gruß,
iaby
Verfasst: 13. Februar 2007 18:44
von upsala
Du suchst QWMatrix
Verfasst: 13. Februar 2007 20:44
von iaby
Danke mal für die Anwort!!
Allerdings hab ich immer noch nicht den Erfolg den ich mir erhoft hatte.
Mein resizeEvent sieht jetzt so aus:
Code: Alles auswählen
void Canvas::resizeEvent( QResizeEvent *e )
{
QWidget::resizeEvent( e );
int w = width() > buffer.width() ?
width() : buffer.width();
int h = height() > buffer.height() ?
height() : buffer.height();
QPixmap tmp( buffer );
buffer.resize( w, h );
buffer.fill( colorGroup().base() );
QWMatrix matrix;
matrix.scale(0.5, 0.5);
tmp = tmp.xForm(matrix);
bitBlt( &buffer, 0, 0, &tmp, 0, 0, tmp.width(), tmp.height() );
}
Er "vergisst" dann immer den Teil des Bildes der nicht sichtbar ist, zudem zeichnet er mir falsch in das Bild. Ich muss zugeben, dass mir der ganze Mechanismus auch sehr unklar ist
Was ich damit eigentlich lösen wollte:
Zur Zeit hab ich ein QLabel das ich am Anfang mit einem Bild per setPixmap() füttere. Mit setScaledContents funktioniert das soweit sehr gut, allerdings wenn ich darauf zeichne und wieder setPixmap() aufrufe, flackert mein Bild eben. Deshalb wollte ich auf DoubleBuffering zurückgreifen, bekomme es aber nicht hin!
Gibt es eine einfach Möglichkeit, wie ich auf mein Label zeichnen kann??
Verfasst: 13. Februar 2007 21:43
von upsala
Scherzkeks, einerseits willst du dynamisch skalieren. Anderereits skalierst du mit 0,5... Außerdem würde ich nicht beim resizeEvent skalieren sondern beim paintEvent
Verfasst: 13. Februar 2007 22:21
von iaby
Ja klar, den Scherzkeks spiel ich aber auch nur grad mal zum Funktions-Test, da bei dynamischer Berechnung immer nur ein leeres bild rauskam! Hab den Fehler aber gefunden (typecast vergessen!)
Mit dem paintEvent komm ich grad nicht zurecht, muss ich mir anschauen wenn ich bissle mehr zeit für hab!
Geht es also nicht so einfach auf das Label zu malen? Bis jetzt hatte da alles so schön einfach angefangen

Verfasst: 14. Februar 2007 08:02
von macman
upsala hat geschrieben:Außerdem würde ich nicht beim resizeEvent skalieren sondern beim paintEvent
Skalieren sollte man nur, wenn sich die Größe auch ändert, also im resizeEvent. Sonst rechnest Du ja bei jeder Fensterschieberei oder wenn was anderes drüber geschoben wird.
Verfasst: 14. Februar 2007 16:27
von upsala
Und? Dafür spare ich mir den zusätzlichen Zwischenspeicher, und ich skaliere auch nur den Teil der auch dargestellt wird...
Verfasst: 18. Februar 2007 17:11
von iaby
Ich danke euch mal für die Antworten soweit!
Aber eine prinzipielle Frage habe ich noch:
Ich zeichne zur Zeit sehr zufrieden auf ein QPixmap. Welche Möglichkeit habe ich nun, dieses QPixmap in meinem Fenster möglichst schnell darzustellen?
Verfasst: 18. Februar 2007 19:35
von upsala
Code: Alles auswählen
void myClass::paintEvent(QPaintEvent *) {
QPainter p(this);
p.drawPixmap(...)
}
Verfasst: 19. Februar 2007 22:27
von iaby
Wie mich so wenige Zeilen Code doch so glücklich machen können

Ich danke dir recht herzlich, bin jetzt grad noch am ausprobieren und verfeinern, sieht aber schon recht gut aus!
THX !!