2016-05-23 9 views
0

Ich erstelle QLabel Objekte in meiner Klasse, und sie zu meiner QList<QLabel*> *objects hinzufügen. Die QList wird in meiner Hauptklasse mit dem Befehl objects = new QList<QLabel*>(); erstellt und dann an die Klasse gesendet, in der die Objekte erstellt und hinzugefügt werden. Diese QList wird auch dann an meine movement class gesendet. In meinem movement class habe ich einen Timer, der erkennt, ob der QList leer ist und wenn es nicht ist, laufe ich alle QLabel Objekte in der QList, und unter bestimmten Umständen verschiebe ich das QLabel Objekt.QLabel Position nicht aktualisiert

Hier kommt mein Problem ins Spiel. Der Code kompiliert perfekt und ich habe debuggen und den Code durchlaufen, die move-Befehle werden perfekt ausgeführt und wenn ich qDebud() verwende, um die x- und y-Koordinate des QLabel anzuzeigen, kehrt es zurück die richtigen Werte aber die Bewegung wird nicht auf meinem Display aktualisiert? Die QLabel wird perfekt zu den richtigen Zeiten gelöscht und wird vom Bildschirm entfernt, aber die Bewegungen werden nicht angezeigt?

Gibt es jemanden mit einigen Einsichten darüber, warum dies geschieht und wie man es beheben kann?

Antwort

1

Der Code bewegt Widgets und Debug-Ausgabe zeigt Position geändert, aber in der Tat einige Widgets sind immer noch da in früheren Position. Warum?

Es besteht die Möglichkeit, dass einige Widget-Positionsupdates verzögert werden. Versuchen Sie mit diesem Aufruf:

QWidget::updateGeometry()

for(auto* pLabel : listOfLabels) 
{ 
    // and other actions suitable 
    // pLabel->move(newPoint(x, y)); 
    pLabel->updateGeometry(); 
} 
+0

Dies scheint keine Wirkung zu haben, was so überhaupt. Sollte ich es implementieren, nachdem der Verschiebevorgang ausgeführt wurde? – 4DaMouf

+0

Dann mehr Code von Ihnen benötigt. Ein minimales ausreichendes Beispiel. – AlexanderVX