Custom item view
Verfasst: Mittwoch 9. Dezember 2015, 14:19
Hallo Leute,
nach fast 4 Jahren C#/WPF bin ich etwas aus der Übung in Qt. Daher bitte ich um Nachsicht, falls mein Anliegen unsinnig ist.
MVC: QStandardItem + QListView + QStandardItemModel
Via QItemDelegate lässt sich das Aussehen des Items im View überschreiben. So weit, so gut.
Nun will ich gern einen "custom" View erzeugen, ähnlich einem QTreeView, allerdings statt "normalen" Items sollen custom Widgets dargestellt sein. Ein Item diesen Typs sieht zum Beispiel so aus:
QCollapsableGuiItem(QFrame)
-------------------------------------------------------------
| > Icon1, Icon2 ItemText Button1 Button2 |
-------------------------------------------------------------
| ChildItem 1 |
-------------------------------------------------------------
| ChildItem 2 |
-------------------------------------------------------------
Meine bisherigen Versuche endeten damit, dass ich eine Klasse QCustomItemView erstellt habe, die SetModel() zur Verfügung stellt. Wenn nun ein Item zum Model hinzugefügt wird, wird der View benachrichtigt, erzeugt ein neues QCollapsableGuiItem und fügt es dem Layout einer QScrollArea hinzu. Analog funktioniert das Ganze für das Entfernen eines Items im Model.
In WPF hätte ich einfach ein ItemControl verwendet und das ItemControlTemplate entsprechend deklariert. Bei Änderungen des Models muss ich da nicht explizit ans Layout ran, der View kümmert sich um die Data->UI population.
Meine Frage ist nun, ob das obige der richtige Weg ist, oder ob jemand eine bessere Alternative weiß. Über QItemDelegate scheint das Geforderte nicht umsetzbar zu sein, jedenfalls sah ich bisher keine Möglichkeit wirkliche QWidgets im View anzuzeigen.
Ich bin für jeden Hinweis dankbar. Vielleicht wurde so etwas in der Art schon an andere Stelle diskutiert. Ich konnte allerdings nichts finden, möglicherweise habe ich die diversen Suchmaschinen mit den falschen Keywords gefüttert!?
Sollte etwas unklar sein, bitte einfach melden. Ich kann ggf. Code zur Verfügung stellen, das wäre dann allerdings C++.
Besten Dank fürs Lesen.
Grüße, Mad
nach fast 4 Jahren C#/WPF bin ich etwas aus der Übung in Qt. Daher bitte ich um Nachsicht, falls mein Anliegen unsinnig ist.
MVC: QStandardItem + QListView + QStandardItemModel
Via QItemDelegate lässt sich das Aussehen des Items im View überschreiben. So weit, so gut.
Nun will ich gern einen "custom" View erzeugen, ähnlich einem QTreeView, allerdings statt "normalen" Items sollen custom Widgets dargestellt sein. Ein Item diesen Typs sieht zum Beispiel so aus:
QCollapsableGuiItem(QFrame)
-------------------------------------------------------------
| > Icon1, Icon2 ItemText Button1 Button2 |
-------------------------------------------------------------
| ChildItem 1 |
-------------------------------------------------------------
| ChildItem 2 |
-------------------------------------------------------------
Meine bisherigen Versuche endeten damit, dass ich eine Klasse QCustomItemView erstellt habe, die SetModel() zur Verfügung stellt. Wenn nun ein Item zum Model hinzugefügt wird, wird der View benachrichtigt, erzeugt ein neues QCollapsableGuiItem und fügt es dem Layout einer QScrollArea hinzu. Analog funktioniert das Ganze für das Entfernen eines Items im Model.
In WPF hätte ich einfach ein ItemControl verwendet und das ItemControlTemplate entsprechend deklariert. Bei Änderungen des Models muss ich da nicht explizit ans Layout ran, der View kümmert sich um die Data->UI population.
Meine Frage ist nun, ob das obige der richtige Weg ist, oder ob jemand eine bessere Alternative weiß. Über QItemDelegate scheint das Geforderte nicht umsetzbar zu sein, jedenfalls sah ich bisher keine Möglichkeit wirkliche QWidgets im View anzuzeigen.
Ich bin für jeden Hinweis dankbar. Vielleicht wurde so etwas in der Art schon an andere Stelle diskutiert. Ich konnte allerdings nichts finden, möglicherweise habe ich die diversen Suchmaschinen mit den falschen Keywords gefüttert!?
Sollte etwas unklar sein, bitte einfach melden. Ich kann ggf. Code zur Verfügung stellen, das wäre dann allerdings C++.
Besten Dank fürs Lesen.
Grüße, Mad