Gast
#6447496
Warum kann ich aus einem Thread den Text eines labels verändern, nicht jedoch die Textfarbe? Funktioniert:
1 | |
Funktioniert nicht:
1 | |
Fehler: Cannot send events to object owned by a different thread
|
Anzeige
|
Qt: Farbe von label aus Thread setzen
Gast
#6447496
Warum kann ich aus einem Thread den Text eines labels verändern, nicht jedoch die Textfarbe? Funktioniert:
Funktioniert nicht:
Fehler: Cannot send events to object owned by a different thread Ich würde sagen: Beides ist falsch, beim Ersten wird der Fehler nur nicht erkannt. Wenn du wirklich Threads braucht (Rat für dich als blutigen Anfänger: Lern QT erstmal ohne) dann mach das per Signal-Slot connections. Entweder erkennt er per "Auto"-Mode dass die Objekte verschiedenen Threads gehören, und macht den Aufruf indirekt über eine Queue und die Main-Eventloop, oder du gibst das explizit beim connect vor. (connectionType=Qt::QueuedConnection)
Gast
#6447517
Εrnst B. schrieb: > beim Ersten wird der Fehler nur > nicht erkannt. Es wird aber definitiv ausgeführt. Bastler schrieb: > Es wird aber definitiv ausgeführt. Ja. Kann ja sein, dass es funktioniert. Laut Dokumentation ist es aber falsch. Fällt dir vielleicht bei der nächsten QT-Version, einer anderen Windows-Version, oder auf einem anderen OS auf die Füße. Eine Schraube kann man auch mit dem Hammer in die Wand klopfen. Ist auch nicht richtig, obwohl es funktioniert.
Gast
#6447527
Ich habe nun slots definiert:
public slots:
void setText(int i, QString str);
void setColor(int i);
Aber auch wenn ich diese vom Thread aufrufe, erhalte ich das selbe
Verhalten, setText geht, setColor nicht.
Ich bin eigentlich kein GUI programmierer und möchte dort auch nicht
groß einsteigen.
Ich habe einen Zeiger auf das Mainwindow, auf das greife ich vom Thread
zu -> das ist garantiert auch falsch.
MainWindow * w;
Gast
#6447545
Kannst Du bitte ein minimales und kompilierbares Beispiel anhängen, ansonsten ist das hier Rätsel raten. Bastler schrieb: > Ich habe nun slots definiert: anders herum. das QLabel hat ja schon die beiden Slots. Du musst in deinem Thread (oder einem QObject, was dem Thread "gehört") entsprechende Signals definieren. dann verbinden
, und analog für das StyleSheet etc. Ob man die Connection auch mit der QueuedConnection-Option per GUI im Designer zusammenklicken kann, weiß ich nicht. Bastler schrieb: > Aber auch wenn ich diese vom Thread aufrufe, erhalte ich das selbe > Verhalten, setText geht, setColor nicht. Da ist ein QLabel zu viel drin. So gehts (aus dem GUI-Thread)
https://doc.qt.io/qt-5/stylesheet-examples.html Oliver Nachtrag:
sollte doch funktionieren. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|