Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Acrobat от Декабрь 24, 2016, 18:08



Название: Вопрос по QTreeWidget
Отправлено: Acrobat от Декабрь 24, 2016, 18:08
Доброго времени суток. Есть небольшой вопрос по QTreeWidget. Вот создавал я много корневых Item. После этого, как мне обратиться к любому из них? Сохранить все указатели на Itemы в контейнере и в случае необходимости добывать от туда указатель и создавать дочерние элементы?


Название: Re: Вопрос по QTreeWidget
Отправлено: Swa от Декабрь 24, 2016, 18:32
http://doc.qt.io/qt-4.8/qtreewidget.html#topLevelItem (http://doc.qt.io/qt-4.8/qtreewidget.html#topLevelItem) ?


Название: Re: Вопрос по QTreeWidget
Отправлено: ingwarsmith от Январь 06, 2017, 20:17
Для обращения к item'у по его индексу:
Код:
QTreeWidgetItem* QTreeWidget::topLevelItem(int index) const

Наоборот, для определения индекса item'а верхнего уровня (index):
Код:
int QTreeWidget::indexOfTopLevelItem(QTreeWidgetItem * item) const

Удобным может оказаться и такой вызов (возврат указателя выделенного элемента QTreeWidget):
Код:
QTreeWidgetItem* QTreeWidget::currentItem() const

Для случая большого числа корневых элементов это более удобно.
Была необходимость создания достаточно разветвленного QTreeWidget, с каждым корневым элементом которого сопоставляется проект расчета, производимого программой и структура дочерних элементов элемента проекта строго типизированная. Для реализации такого дерева использовался потомок QTreeWidget из элементов TreeElement (потомок QTreeWidgetItem с указанием типа элемента ч/з enum). В дереве для индексации по корневым элементам использован QMap<int, TreeElement>. Разумеется, данные проекта расчета хранятся в других объектах (различных типов), хранящихся в контейнерах, причем каждый объект данных хранит указатель на соответствующий элемент TreeElement в дереве. Всего же всех элементов дерева, как правило, не более 80 (определяется числом открытых в программе проектов расчета).