Модели Creating Qt для структурных видов

Я пишу приложение в QT (с C++), и я должен представить структуру объекта в структурном виде. Один из способов сделать это должно создать модель для этого, но я все еще вполне смущен после чтения спокойной документации о предмете.

"Структура", которую я имею, довольно проста - существует a Project объект, который содержит Task объекты в a std::vector контейнер. Эти задачи могут также содержать дочерние задачи.

Я уже записал методы, чтобы прочитать и записать эти проекты в XML-файлы с помощью классов QT XML.

Есть ли еще, документация или "рекомендовала читать" для создания моделей с нуля? Как Вы рекомендуете, чтобы я начал реализовывать это?

12
задан Veeti 31 December 2009 в 16:01
поделиться

2 ответа

В качестве альтернативы тому, что было сказано Virgil в комментарии к вопросу, вы можете использовать класс 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);

Когда пользовательский интерфейс (вид) уничтожен, удалите модель. Документация:

12
ответ дан 2 December 2019 в 20:41
поделиться

Основная хитрость этой работы заключается в том, чтобы правильно отобразить модель в структуру данных. Что-то, что может показаться сложным, но не обязательно.

Во-первых, используя QAbstractItemModel::createIndex для построения индексов модели, вы можете ссылаться на свою собственную структуру данных через указатель или uint32, который вы можете добавить в индекс, в зависимости от того, какой экземпляр createIndex вы выберете для использования.

Во-вторых, имея структуру в виду (как вам кажется), довольно легко записать функции parent и index. Ключевым моментом здесь является понимание того, что корень модели является неинициализированным экземпляром QModelIndex. Т.е. QModelIndex::isValid() == false указывает на корень.

В-третьих, если вы перейдете к мультистолбцу, помните, что только первый столбец имеет дочерние элементы.

Четвертое, чтобы проверить, что вы делаете ожидаемым образом, используйте класс ModelTest. Он отслеживает и проверяет вашу модель, так что вы следуете конвенциям, которые ожидают классы просмотра модели Qt.

3
ответ дан 2 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: