QWidget neu zeichnen + genügt repaint() ??



  • Hi, Mich würde interessieren, wie man denn ein
    Widget neu zeichnet ??
    Also der Aufruf von repaint() scheit nicht zu genügen ???
    Oder liege ich da falsch ??

    Gruß



  • void QWidget::repaint () [slot]
    Repaints the widget directly by calling paintEvent() immediately, unless updates are disabled or the widget is hidden.

    We suggest only using repaint() if you need an immediate repaint, for example during animation. In almost all circumstances update() is better, as it permits Qt to optimize for speed and minimize flicker.

    Warning: If you call repaint() in a function which may itself be called from paintEvent(), you may get infinite recursion. The update() function never causes recursion.

    See also update(), paintEvent(), and setUpdatesEnabled().

    Wenn updatesEnabled auf false gesetzt ist, gibts keinen repaint.

    Was erwartest du denn was passiert, dass du annimmst, dass es nicht neu zeichnet?
    Und warum nimmst du nicht update()?

    Wenn es dein GlWidget ist -> updateGL()?



  • Also ich sitze immer noch an dem Problem von
    "Nicht rechteckige Fenster +QT"

    (Kurtzbeschreibung:
    Ich habe eine Hauptklassen ("Haupt") von QWidget abgeleitet, mit einem
    QGridLayout als Layout system.

    Diesem Layout füge ich klassen hinzu:
    Eine ist ein QLabel ("Label"), die andere eine von QGLWidget ("OpenGL") abgeleitete klasse.

    Die Label und OpneGL Widgets überschneiden sich in einem Stück.

    Wenn ich die Fenstergröße mit der Maus verändere, verschmiert mir genau das stück in welchem sich OpenGL und Label überschneiden.

    Ich führe nun ein Label->update() oder ein Label->repaint() und beides habe ich auch schon versucht, 🙂 aus, wenn ich eine beliebige taste drücke.
    Ich hätte erwartet, dss nach dem drücken der Taste das Label nicht mehr verschmiert ist, weil ich dieses ja explizit neu gezeichnet oder geupdated habe.

    Das ist aber nicht der Fall. Auch nicht, wenn ich der OpenGL klasse ein Update verbiete, solange ich Label ausführe.

    Ich verstehe nicht, wiso das nicht funktioniert.

    Ich habe auch versucht, für meine Label klasse die WindowFlags zu setzen, so das mein Label immer im Vordergrund gezeichnet werden sollte. Ich benutze X11 und habe die Windowflags auch mal Bitweise verodert, weil man da ja Bypass machen soll. Geht aber auch nicht ???


Anmelden zum Antworten