TreeWidget als Menü

Alles rund um die Programmierung mit Qt
Antworten
mrwienh
Beiträge: 5
Registriert: 18. August 2009 14:51

TreeWidget als Menü

Beitrag von mrwienh »

Hallo zusammen,

ich bin relativ neuer QT-Benutzer, hoffe also, dass meine Anfrage nicht allzu sinnfrei ist:

Ich plane momentan ein TreeWidget als Umschalter für ein anderes Fenster zu nutzen. Bei Klick auf ein Item des TreeWidget soll dabei eine dem Item entsprechende Aktion ausgeführt werden.

Ein TreeView scheint hierzu weniger geeignet, da der indexbasierte Zugriff zu unflexibel ist, ein TreeWidget sollte aber doch im Signal itemPressed() das angeklickte Item zurückliefern. Wäre es denkbar dann auf diesem Item eine zuvor definierte Funktion zum Umschalten zu verwenden oder gibt es eine bessere/einfachere Alternative. Wie würde man eine solche generalisierte Funktion anlegen. Eigenes Item von QTreeWidgetItem ableiten?

Vielen Dank

Markus
Mani99
Beiträge: 244
Registriert: 15. April 2009 10:46
Wohnort: München

Beitrag von Mani99 »

Ich würde

Code: Alles auswählen

void itemSelectionChanged ()
verwenden (signal) und würde eine methode (slot) ausführen die dann per switch den index abfragt und anhand des indexes eine aktion ausführt.
mrwienh
Beiträge: 5
Registriert: 18. August 2009 14:51

Beitrag von mrwienh »

Hi Mani,

das Problem an der indexbasierten Methode ist, dass der Baum unter Umständen sehr umfangreich werden kann, verschiedene Arten von items enthält und u.U. umsortiert werden können muss...

Bei der Referenzierung per Index würde dies zu massiven Problemen führen...
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

das Problem an der indexbasierten Methode ist, dass der Baum unter Umständen sehr umfangreich werden kann, verschiedene Arten von items enthält und u.U. umsortiert werden können muss...
Und du meinst du kannst das ueber eigene items performanter loesen ?
der unterschied zwischen model version und item version ist am ende gar ned so gross, du machst deine Aenderungen nur auf andere ebene.

z.b. brauchst du beim umsortieren deine daten ned neueingeben, sondern musst nur die indizies neu berechnen lassen.
Dabei cacht das model/View konzept so, das es sich nur die grad sichtbaren eintraege neu holt ...
bei nem itembasierenden muesst man das ziemlich aufwendig selbst implementieren ....

auch das aufbauen der parent - child beziehungen braucht das model / view teil nur einmal abzufragen, wenn die sich ned aendert ... wenn die sich aendert, darfst den geaenderten Baum eh neu machen lassen (reset). Ich glaub kaum das da beim itembasierenden view irgendwo tricksen kannst, das wesentlich schneller bist ....

Das die MVC basierenden elemente wesentlich langsamer sind, kann ich ned glauben ^^ man muss nur seine Möglichkeiten nutzen ...

ciao ...
mrwienh
Beiträge: 5
Registriert: 18. August 2009 14:51

Beitrag von mrwienh »

Hi,

ich habe das ganze gerade mal als Proof Of Concept so gelöst:

QTreeWidgetItem erweitert, zusätzliche executeItemAction() Methode

QTreeWidget feuert bei itemClicked() auf einen Slot, der die executeItemAction() Methode des jeweiligen Items aufruft.

Somit kann ich die unterschiedlichen Items von meinem Item ableiten und ohne Wissen über deren Position im Baum eine dem Item entsprechende Funktion ausführen...

Denkfehler?
Antworten