Delegates und QProgressBar zur Anzeige in QTableView

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

Hallo,

irgendwie komme ich mit Delegates nicht weiter.

Ich habe mir in der Qt-Anleitung schon einmal das Tutorial durchgelesen, aber dort wird nur gezeigt, wie man einen Editor, der zur Bearbeitung benutzt wird, einrichtet. Das habe ich auch nachvollzogen und das ist auch nicht gerade schwer. Allerdings erscheint dort der Editor nur, wenn man eben etwas bearbeiten will, also nach einem Doppelklick auf ein Feld.

Aber ich möchte bei mir eine QProgressBar zur Anzeige verwenden, die nichts verändert und schon zu Beginn erscheint. Meine Tabelle soll so aussehen:
Dateiname | Dateigröße | Fortschritt.
Die ersten beiden Spalten sind fix und in der dritten Spalte soll der Wert (bereits übertragene Bytes) laufend verändern werden, wobei dann statt der Zahl eine QProgressBar erscheinen soll. Den Maximalwert kann ich ja aus der zweiten Spalte übernehmen.

Für die Anzeige nutzt man ja, so wie ich das verstanden habe, die paint()-Funktion des Delegates, aber mich verwirrt das mit dem Painter. Wie benutzt man das um eine QProgressBar zu zeichnen? Und soll ich die QProgressBar bei jedem Aufruf von paint() neu erzeugen? Was hat das mit der option auf sich?

Tut mir leid für die recht offen gestellte Frage, aber irgendwie kämpfe ich mich gerade durch tausende Tutorials aber verstehe es einfach nicht :(

Danke!
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

Schau dir die Referenz zu QStyleOptionProgressBar an. Du findest sicher auch Code-Beispiele im Netz. Die Lösung über diesen Weg ist aber etwas limitiert.
Für die komplette Freiheit und Kontrolle bleibt letzten Endes nur die Entwicklung einer eigene Komponente respektive eines eigenen TableView. Haben wir bei uns im Unternehmen auch gemacht. (impliziert allerdings einen nicht zu unterschätzenden Zeitaufwand!)
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

Hallo und danke für die Antwort.

Das hört sich ja doch sehr kompliziert an... Hmm... Mit einem QTableWidget funktioniert das so einfach, aber mit einem TableView nicht...

Mittlerweile glaube ich, dass ich das Projekt QProgressBar in Tabelle wohl erst einmal auf Eis legen werde und da nur eine normale Prozentanzeige in Textform für nehmen werde :D Wenn das wirklich so kompliziert ist, widme ich mich erst einmal lieber anderen Projekten und komme da in Zukunft vielleicht mal wieder drauf zurück.

Danke!
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

Wenn es kein OS-treues Widget sein muss, kannst du die ProgressBar einfach im paintEvent selbst zeichnen. Also eine ganz eigene, meine ich. Im Prinzip ist solch eine ProgressBar doch nur ein farbiger Balken mit einer Textanzeige für den Fortschritt, entweder absolut oder in Prozent. Dazu findest du auf jeden Fall unzählbar viele Beispiele im Netz.
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

Hm, ich glaube, so gut bin ich noch nicht. Mit dem ganzen Zeichnen in Qt habe ich mich noch nicht wirklich befasst, ich möchte erst einmal grob überhaupt irgendetwas Lauffähiges auf die Beine kriegen :D

Da eine ProgressBar in einem TableWidget ja sehr einfach ist, dachte ich, dass das in einem TableView auch gut funktioniert. ModelView ist ja sonst auch nicht so schwierig (zumindest grundlegend), so dass ich dachte, dass das gut klappt.

Naja, ich werde jetzt einfach eine Prozentanzeige als Text machen, die sich dann verändert :D Das ist ja nicht so schwierig, da muss ich ja nur eine eigene Anzeige erstellen.
Antworten