Ich verwende Qt 5.6 und mein Ziel ist es, eine dynamische Struktur mit QTreeView zu entwickeln, die Elemente wie Kombinationsfelder, Bearbeitungsfeld, Kontrollkästchen, Schaltflächen usw. abhängig von den Einstellungen und geladen werden muss Die Baumdaten können sich ändern, wenn neue Daten geladen werden. Es wird viele Knoten geben, die in der Struktur mit Eltern- und Kindknoten gefüllt werden.dynamische qtreeview mit benutzerdefinierten Delegaten
Ich habe über verschiedene Optionen gelesen, um diese Art von Treeview zu implementieren, wie das Auffüllen eines QTreeView und das Implementieren meines eigenen Delegaten durch Erben von QITemDelegate oder QStyledItemDelegate oder mithilfe von Qt Quicks QML-Treeview.
Für meine Zwecke habe ich die erste Option ausgewählt, um dynamisch einen Baum zu bevölkern und Parameter zu ändern, aber ich habe Probleme, den Delegaten für eine ausgewählte Zelle nur als die einzigen Optionen zum Festlegen des Delegaten in der Struktur festlegen setItemDelegateForRow, setItemDelegateForColumn oder setItemDelegate. Der Baum wird ungefähr wie folgt aussehen. Wie sollte ich einen anderen Delegaten für jeden der untergeordneten Knoten festlegen?
by (col, row)
Parent(cell 0,0)
->Child(cell 0,1) -combo box(1,1)
->Child(cell 0,2) -button(1,2)
->Child(cell 0,3) -check box(1,3)
...
...etc
Parent(cell 0,10)
->Child(cell 0,11) - edit box(1,11)
->Child(cell 0,12) - edit box(1,12)
->Child(cell 0,13) - check box(1,13)
...
...etc
bearbeiten
Dies ist eine vereinfachte Version von, wie ich bisher Ansicht meines Baumes-Setup. Ich fand heraus, warum meine Kindknotenspalte 1 nicht angezeigt wurde, weil ich die Spaltenanzahl des Modells nicht festgelegt hatte. Ich habe den Code unten aktualisiert und es funktioniert jetzt.
enum EditType
{
TYPE_Text,
TYPE_CheckBox,
TYPE_ComboBox,
TYPE_Button
};
QTreeView* tree = new QTreeView(this);
QStandardItemModel* model = new QStandardItemModel;
model->setColumnCount(2);
tree->setModel(model);
//set custom delegate for column 1 of the tree
CustomDelegate *customDelegate = new CustomDelegate(this);
tree->setItemDelegateForColumn(1, customDelegate);
// Add parent nodes
QStandardItem* parent1 = new QStandardItem(tr("parent1"));
QStandardItem* parent2 = new QStandardItem(tr("parent2"));
model->appendRow(parent1);
model->appendRow(parent2);
// add a child
QList<QStandardItem*> childrow;
QStandardItem* child = new QStandardItem(tr("child1"));
childrow.append(child);
QStandardItem* child_value = new QStandardItem();
child_value->setData(TYPE_ComboBox, Qt::UserRole);
childrow.append(child_value);
parent1->appendRow(it_child);
überprüfen Sie diese: https://github.com/commontk/QtPropertyBrowser, https://github.com/intbots/QtPropertyBrowser, https://doc.qt.io/ archives/qq/qq18-propertybrowser.html – mvidelgauz