Mehrere QThreads mittels QTableWidget verwalten...

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
AngelusNoctis
User
Beiträge: 92
Registriert: Sonntag 16. Dezember 2007, 20:03

Hi

Ich hätte ne kleine "Verständnisfrage"...

Also ich würde gerne ein QMainWindow erstellen das ein QTableWidget enthält.
In dem QMainWindow kann man dann mehrere Jobs erstellen.
Jeder Job wird als eigener QThread ausgeführt und enthält ein QProgressBar und QPushButton (Cancel).

Nun ist aber die Frage wie genau, bewerkstelligt man es das z.B. QThread Nr 2 den QProgessBar in Zeile 2 des QTableWidget updates und das der QPushButton in Zeile 2 den QThread Nr 2 und nicht QThread Nr 1 oder sonst einen beendet?

So ala KTorrent...


PS: Code kann ich leider keinen bieten, da ich noch garnix geschrieben habe zur "Steuerung"..
deets

Indem du die entsprechenden Widgets nur mit den dazugehoerigen Threads verbindest? Ich verstehe deine Frage ehrlich gesagt nicht. QTable-Inhalte updates du doch auch single-threaded nicht alle auf einmal.
AngelusNoctis
User
Beiträge: 92
Registriert: Sonntag 16. Dezember 2007, 20:03

deets hat geschrieben:Indem du die entsprechenden Widgets nur mit den dazugehoerigen Threads verbindest? Ich verstehe deine Frage ehrlich gesagt nicht. QTable-Inhalte updates du doch auch single-threaded nicht alle auf einmal.

Naja ich versuchs mal mit Pseudocode... Also...

Aussehen soll das ganze so: Bild

Wenn man jetzt im Contextmenü auf z.B. sdb geht und "erase" drückt sollte der slot onErase() aktiviert werden.

Und da ist dann Code ala...

Füge neue Zeile zu QTableWidget hinzu
Füge currentItem von QTreeView zu QTableWidget Zeile 1 und Spalte 0 hinzu
Füge QProgressBar zu QTableWidget Zeile 1 und Spalte 1 hinzu
Füge QPushButton zu QTableWidget Zeile 1 und Spalte 2 hinzu
Starte Thread Nr 2

Wenn jetzt aber Thread Nr 2 (sdb) ein Signal emittet oder der QPushButton gedrückt wird... wie müssen dann Signal/Slots verbunden werden?
Ich hab mir die Source von KTorrent angeguckt da wird QObject.sender() benutzt.

EDIT:

Also ich hab jetzt als Notlösung folgendes:
Ich leg die z.B. QPushButtons in ner Liste ab und mittels QTableWidget Zeile + self.sender + der Liste kann ich dann checken welcher QPushButton geklickt wurde.

Gibts da nicht was "schöneres"?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du kannst einem Signal weitere Informationen "mitgeben" - Python sei Dank! Ich hatte dazu mal ein Beispiel geschrieben: Link

Generell wage ich zu bezweifeln, dass ein `QTableWidget` dafür geeignet ist - kann man damit Delegates realisieren? Ich würde stark vermuten, dass ein `QTableView` die geeignetere Wahl wäre...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
AngelusNoctis
User
Beiträge: 92
Registriert: Sonntag 16. Dezember 2007, 20:03

Hyperion hat geschrieben:Du kannst einem Signal weitere Informationen "mitgeben" - Python sei Dank! Ich hatte dazu mal ein Beispiel geschrieben: Link

Generell wage ich zu bezweifeln, dass ein `QTableWidget` dafür geeignet ist - kann man damit Delegates realisieren? Ich würde stark vermuten, dass ein `QTableView` die geeignetere Wahl wäre...


EDIT:

So hab das ganze mal gelöst, werde mir QTableView aber noch angucken...


Danke an alle!
Antworten