(Q)Widget aus MainWindow in einem (Q)Thread verändern

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Neuling_
Beiträge: 83
Registriert: 8. August 2009 20:55

(Q)Widget aus MainWindow in einem (Q)Thread verändern

Beitrag von Neuling_ »

Hallo,

ich stehe gerade wieder gewaltig auf dem Schlauch.
Ich habe mit dem Qt Creator ein einfaches Programm geschrieben, dass mir einen QThread erstellt.
Ich besitze:
  • QThread_test.pro
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui (<- besitzt u.A. ein QLineEdit!)
    thread.cpp
    thread.h
So; ich möchte nun dass mein Thread (so heißt die von QThread abgeleitete Klasse) Zugriff auf das QLineEdit in der .ui hat.
Blos, wie mache ich das?
Die Klasse MainWindow kann ich der Klasse Thread ja nicht einfach Vererben:
Warning: Class Thread inherits from two QObject subclasses QThread and MainWindow. This is not supported!
<- das liegt daran dass ich Q_OBJECT jeweils in der Klasse habe
<- Aber was kann ich anstelle von Q_OBJECT benutzen?

Ich habe mir auch überlegt Pointer zu benutzen, blos weiß ich nicht wie.
Meine Gedanken gehen nur soweit, dass ich zwar das QLineEdit einem QLineEdit2(aus der Klasse Thread) zuweisen kann. Aber dann wird mir das Window ja nicht einfach aktualisiert...


Hilfe wäre toll ;)
Gruß.



PS: Hab es in C++ Grundlagen da es ja im Prinzip um Vererbung geht.
Qt 2009.05
Entw.-umgebung Qt-Creator
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Da man eh nur im Mainthread zeichnen kann ist funktioniert es sowieso nicht.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Neuling_
Beiträge: 83
Registriert: 8. August 2009 20:55

Beitrag von Neuling_ »

Und die Lösung des Problems?
Qt 2009.05
Entw.-umgebung Qt-Creator
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Einen Workerthread zur Berechnung und Darstellung der Daten im Mainthread.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Neuling_
Beiträge: 83
Registriert: 8. August 2009 20:55

Beitrag von Neuling_ »

Wie soll das funktionieren wenn doch nur der MainThread malen kann?

Ich kann zwar die Daten dann aus dem WorkerThread ziehen, aber dann doch auch nur einmal (wenn ich nichts update)


Danke schonmal für die Stichworte
Qt 2009.05
Entw.-umgebung Qt-Creator
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Signals und Slots gehen auch über Threadgrenzen hinweg. http://doc.trolltech.com/4.4/signalsandslots.html
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Neuling_
Beiträge: 83
Registriert: 8. August 2009 20:55

Beitrag von Neuling_ »

das ist gut. da muss ich mich nachher mit beschäftigen!

bin gerade zufällig hierrauf gestoßen, da ist es mir mit den Signals auch durch den Kopf gegangen^^


Mahlzeit
Qt 2009.05
Entw.-umgebung Qt-Creator
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Ja was ist daran schlimmes ???

Signale / Slots nutzen intern auch Nachrichten .... nur deshalb koennens ueberhaupt ueber threads hinweg kommunizieren.

Du kannst also auch ueber nachrichten den Workerthread mit der GUI kommunizieren lassen ! iss gar ned so schwer !

DU kannst die kommunikation auch noch weiter tiefer ansetzen und ueber gemeinsame Variablen gehen (locks ned vergessen) ! wuerde sinn machen wenn deine daten die du uebermitteln willst bissi umfangreicher waeren und schlecht kopierbar ...
oder wenn du Daten von der GUI ->Workerthread uebermitteln musst, und keine eventschleife im workersthread haben willst/kannst ....

Ciao ...
Antworten