Создание моделей Qt для древовидных представлений
3 ответов
на QTreeView
новички, основная проблема заключается в понимании index()
и parent()
. Недавно я написал об этом статью:
http://www.hardcoded.net/articles/using_qtreeview_with_qabstractitemmodel.htm
пример кода на Python, но принципы остаются теми же.
в качестве альтернативы тому, что сказал Вергилий, вы можете использовать QStandardItemModel - класс для вашей модели и просто построить дерево, Используя этот класс. Ниже приведен пример:
QStandardItemModel* model = new QStandardItemModel();
QStandardItem* item0 = new QStandardItem(QIcon("test.png"), "1 first item");
QStandardItem* item1 = new QStandardItem(QIcon("test.png"), "2 second item");
QStandardItem* item3 = new QStandardItem(QIcon("test.png"), "3 third item");
QStandardItem* item4 = new QStandardItem("4 forth item");
model->appendRow(item0);
item0->appendRow(item3);
item0->appendRow(item4);
model->appendRow(item1);
ui->treeView->setModel(model);
надеюсь, это поможет, с уважением
основной трюк, чтобы получить эту работу, действительно, чтобы получить модель для отображения структуры данных. Что-то, что может показаться трудным, но не обязательно.
во-первых, с помощью помощью переопределенной QAbstractItemModel::значение createindex для построения индексов модели можно ссылаться на собственную структуру данных с помощью указателя или uint32, который можно добавить в индекс, в зависимости от того, какой экземпляр createIndex вы выберете для использования.
во-вторых, имея в виду структуру (как вы кажется, есть), это довольно легко написать parent
и index
функции. Ключевым моментом здесь является, чтобы понять, что корневой элемент модели является unintialized QModelIndex
экземпляра. Т. е. QModelIndex::isValid() == false
указывает на корень.
В-третьих, если вы идете в несколько столбцов, помните, что только в первом столбце есть дети.
В-четвертых, чтобы проверить, что вы делаете вещи правильно, не используйте ModelTest класса. Он отслеживает и проверяет вашу модель, чтобы вы следовали соглашениям, которые модель Qt вид занятий ожидать.