Я использую Qt 5.6, и моя цель - разработать динамическое дерево с использованием QTreeView, которое должно заполнить такие элементы, как комбинированные поля, поле редактирования, флажок, кнопки..etc в зависимости от загруженных настроек и данные дерева могут изменяться по мере загрузки новых данных. В дереве будет множество узлов для заполнения родительским и дочерним узлами.динамический qtreeview с пользовательскими делегатами
Я читал о различных вариантах реализации такого типа древовидного типа, например, заполнении QTreeView и реализации моего собственного делегата путем наследования от QITemDelegate или QStyledItemDelegate или с помощью Qt-кода Qt treeview.
Для моих целей я выбрал первый вариант динамического заполнения дерева и изменения параметров, но у меня возникли проблемы с настройкой делегата, который я хочу для выбранной ячейки, только в качестве единственных опций для назначения делегата в дереве to setItemDelegateForRow, setItemDelegateForColumn или setItemDelegate. Дерево будет выглядеть примерно так: Как мне установить другой делегат для каждого из дочерних узлов?
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
Редактировать
Это упрощенная версия того, как у меня есть настройки моего древовидная до сих пор. Обнаружил ответ на вопрос, почему не был показан столбец 1 моего дочернего узла, потому что я не задал количество столбцов модели. Я обновил код ниже, и теперь он работает.
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);
проверить это: https://github.com/commontk/QtPropertyBrowser, https://github.com/intbots/QtPropertyBrowser, https://doc.qt.io/ архивы/qq/qq18-propertybrowser.html – mvidelgauz