QT Frage - permanent zeichnen



  • Hallo, vielleicht kennt sich hier ja jemand ein bisschen mit QT aus.
    Ich muss etwas auf ein Fenster zeichnen. Soweit, so gut. Das bekomme ich auch hin, sowohl mit QPainter auf Widget oder auf QPixmap .

    Das große Problem was ich nun habe, ist, dass da nicht permanent gezeichnet wird. wenn ich z.B. ein anderes Fenster darüberschiebe, oder das Fenster über den Rand schiebe, sind die entsprechenden Bereiche verschwunden.

    Wie bekommt man das in den Griff?

    Danke, Marrt



  • Marrt schrieb:

    Das große Problem was ich nun habe, ist, dass da nicht permanent gezeichnet wird. wenn ich z.B. ein anderes Fenster darüberschiebe, oder das Fenster über den Rand schiebe, sind die entsprechenden Bereiche verschwunden.

    Bist du sicher, dass du QWidgets paintEvent-Methode korrekt überschrieben hast?
    Wenn du dein Widget immer in ein Pixmap zeichnest kannst du hier am Einfachsten ein bitBlt des kompletten Pixmaps machen:

    void DeinWidget::paintEvent(QPaintEvent*)
    {
    	bitBlt(this, 0,0, &pixmap_);
    }
    
    void DeinWidget::resizeEvent(QResizeEvent*)
    {
    	updatePixmap();  // aktualisiert die Größe und den Inhalt der Pixmap
    }
    

    Alternativ kannst du natürlich auch einfach nur die Bereiche neuzeichnen, die
    betroffen sind:

    void DeinWidget::paintEvent(QPaintEvent*)
    {
        QMemArray<QRect> rects = event->region().rects();
        for (int i = 0; i < (int)rects.size(); ++i)
            bitBlt(this, rects[i].topLeft(), &pixmap_, rects[i]);}
    }
    

    Oder habe ich deine Frage jetztz falsch verstanden?



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich benutze gar keine paintevent-Funktion. Ich habe einfach eine Funktion
    erzeuge(), die ein QDialog ist und dort male ich mit dem QPainter.
    Später will ich mit diesem Fenster auch gar nichts mehr machen, ausser ein bisschen hin- und herschieben. Aber der Inhalt muss schon draufbleiben. Und das bekomme ich nicht hin.

    Marrt



  • Marrt schrieb:

    Ich benutze gar keine paintevent-Funktion.

    Tja, dann hast du soeben dein Problem gefunden.
    Du solltest dringend noch mal etwas in der Qt-Doku und in den Qt-Examples schmöckern. Besonders Kapitel zum Thema "Wie implementiere ich mein eigenes Widget".
    Ein guter Startpunkt: http://doc.trolltech.com/3.3/qwidget.html#details



  • Hmm ja .. schon 😃

    Muss ich die paint-event Funktion selbst anlegen?
    Geht dann die von dir da oben?

    Und vor allem: werden diese Paint-Events automatisch ausgeführt, sowie ich das Fenster bewege oder was drüberschiebe?

    Thx, Mart



  • ES FUNKTIONIERT!!!

    DAnke jedenfalls.

    Marrt


Anmelden zum Antworten