QCanvas und gestrechtes Bild

Alles rund um die Programmierung mit Qt
Antworten
iaby
Beiträge: 53
Registriert: 10. Februar 2007 13:12

QCanvas und gestrechtes Bild

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du suchst QWMatrix
iaby
Beiträge: 53
Registriert: 10. Februar 2007 13:12

Beitrag 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??
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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
iaby
Beiträge: 53
Registriert: 10. Februar 2007 13:12

Beitrag 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 ;)
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Und? Dafür spare ich mir den zusätzlichen Zwischenspeicher, und ich skaliere auch nur den Teil der auch dargestellt wird...
iaby
Beiträge: 53
Registriert: 10. Februar 2007 13:12

Beitrag 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?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Code: Alles auswählen

void myClass::paintEvent(QPaintEvent *) {
  QPainter p(this);
  p.drawPixmap(...)
}
iaby
Beiträge: 53
Registriert: 10. Februar 2007 13:12

Beitrag 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 !!
Antworten