Я хочу отобразить следующие данные в QTreeView:
Мужчины:
отметка
Стив
Джеймс
Женщины:
Энн
Джойс
Эмили
Девушки подростки:
Ребека
Alex
Подростки мужского пола:
Сэм
Ян
Я использую библиотеку Qt версии 4.8.
Мне интересно, какой QAbstractItemModel подойдет для этого?
Мне кажется, что я должен использовать QDirModel — так я хочу, чтобы мой QTreeView был похож. Но это глупо: я не буду отображать строки, как каталоги.
Это довольно удивительно, но хотя QTreeView предоставляет необходимые мне функции, нет модели, подходящей для моих данных.
Чтобы было понятно: мне нужно что-то вроде QListWidget с этими элементами. Они должны быть расширяемыми, чтобы пользователь мог видеть имена людей определенных тип.
Извините за глупый пример. Как я могу сделать это в Qt?
Для простых задач QTreeWidget (без какой-либо внешней модели) достаточно хорош.
QTreeWidget* tree = new QTreeWidget(this);
QTreeWidgetItem* itemMen = new QTreeWidgetItem({"Men"});
QTreeWidgetItem* itemMark = new QTreeWidgetItem({"Mark"});
QTreeWidgetItem* itemSteve = new QTreeWidgetItem({"Steve"});
tree->addTopLevelItem(itemMen);
itemMen->addChild(itemMark);
itemMen->addChild(itemSteve);
Если вам нужно больше контроля, используйте комбинацию QStandardItemModel
+ QTreeView
,
QStandardItemModel* model = new QStandardItemModel(this);
model->setRowCount(1); // Top level item count.
model->setColumnCount(1);
QTreeView* tree = new QTreeView(this);
tree->setModel(model);
QStandardItem* itemMen = new QStandardItem("Men");
QStandardItem* itemMark = new QStandardItem("Mark");
QStandardItem* itemSteve = new QStandardItem("Steve");
model->setItem(0, 0, itemMen);
itemMen->setRowCount(2);
itemMen->setColumnCount(0);
itemMen->setChild(0, 0, itemMark);
itemMen->setChild(1, 0, itemSteve);
редактировать
С QTreeView::setRootIsDecorated()
Вы можете показать или скрыть элементы управления для раскрытия и свертывания элементов верхнего уровня.
Других решений пока нет …