Russian Qt Forum
Ноябрь 24, 2024, 05:48
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Model-View (MV)
>
QTreeView и вставка пустых детей родителям
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QTreeView и вставка пустых детей родителям (Прочитано 7324 раз)
patison
Гость
QTreeView и вставка пустых детей родителям
«
:
Сентябрь 16, 2010, 15:57 »
Имеется treeview, а также имеется модель для заполнения данными этого treeview.
вопрос состоит в следующем - есть-ли возможность задавать некоторым узлам (родителям) пустых детей, таким образом, что-бы у каждого из этих родителей добавлялся значок развёртки (+), и при нажатии на который, в случае если дети пусты, просто появлялся значок свёртки (-).
Попытался решить вопрос путём добавления родителю пустого контейнера в качестве ребёнка (пустой QList), однако при развёртывании этого родительского узла - показывается один пустой элемент (а хотелось-бы сделать аналогично модели QFileSystemModel, в которой это дело реализовано для пустых папок).
Спасибо.
Записан
EhTemka
Гость
Re: QTreeView и вставка пустых детей родителям
«
Ответ #1 :
Сентябрь 16, 2010, 16:10 »
Можно переопределить функцию bool hasChildren(const QModelIndex &parent) const у модели и в ней реализовать проверку, что-то типа данных не запрошены значит true, данные запрошены, но их нет - значит false
Записан
Denjs
Гость
Re: QTreeView и вставка пустых детей родителям
«
Ответ #2 :
Сентябрь 16, 2010, 16:13 »
Я конечно не по теме, но вам не кажется, что лучше информировать пользователя что у объекта нет дочерних объектов путем "отсутствия плюсика" ещё до того как он попытается открыть элемент?
а если вам надоинформировать что этот элемент - скажем каталог, а не файл и может содержать дочерние объекты в принципе - используйте для этого соответсвующие иконки.
зачем вам понадобилось так делать как вы описываете?
Записан
patison
Гость
Re: QTreeView и вставка пустых детей родителям
«
Ответ #3 :
Сентябрь 16, 2010, 16:52 »
Denjs:
Ну дело в том, что загружаются все элементы по мере надобности. Т.е. только тогда, когда юзер раскрывает родителя. На момент загрузки первоначальных айтемов (из какого-то условново корня), я не могу знать для каждого из загруженных элементов - есть у него дети или нет, а даже если и смогу как-то это узнать - мне надо каким-то образом ему подставить этот крестик.
На данный момент плюсики появляются только у тех элементов, в которые по факту были подгружены дети.
Записан
Kolobok
Гость
Re: QTreeView и вставка пустых детей родителям
«
Ответ #4 :
Сентябрь 16, 2010, 17:12 »
Цитата: patison от Сентябрь 16, 2010, 16:52
а даже если и смогу как-то это узнать - мне надо каким-то образом ему подставить этот крестик.
Для этого тебе и посоветовали переопределить функцию bool hasChildren(const QModelIndex &parent) const у модели. Если функция возвращает true то view нарисует крестик для этого индекса.
Записан
patison
Гость
Re: QTreeView и вставка пустых детей родителям
«
Ответ #5 :
Сентябрь 16, 2010, 17:20 »
Уже пошёл пробовать
Записан
EhTemka
Гость
Re: QTreeView и вставка пустых детей родителям
«
Ответ #6 :
Сентябрь 16, 2010, 17:29 »
Про проверку на парент не забудь, если парент невалидный нужно всегда возвращать true
Записан
patison
Гость
Re: QTreeView и вставка пустых детей родителям
«
Ответ #7 :
Сентябрь 16, 2010, 19:52 »
Ну впринципе работает.
Но хотелось-бы как-то не для всех сразу возвращать true, а для каких-то конкретных. Через parent проверить не получится, т.к. он содержит только данные в виде текста (текст самого элемента в дереве). Было-бы идеально, если-бы при занесении элемента в модель - можно было явно для каждого элемента указывать.
Записан
EhTemka
Гость
Re: QTreeView и вставка пустых детей родителям
«
Ответ #8 :
Сентябрь 16, 2010, 19:57 »
парент содержит еще номер строки и свой парент. Ответ на твой вопрос содержится в ответе на вопрос как ты связываешь свои данные с индексами в модели.
Записан
patison
Гость
Re: QTreeView и вставка пустых детей родителям
«
Ответ #9 :
Сентябрь 16, 2010, 20:20 »
Хм.. Вот над этим я не задумывался. Данными просто заполняется модель. Данные - будь то листинг файлов и директорий, будь какая-нибудь коллекция данных, полученная из БД. Т.е. есть цикл перебора этих данных, на каждой итерации цикла в QList забиваются все столбцы по конкретному элементу, и производится присоединение элемента к списку: parents.last()->appendChild(fItem);
Записан
EhTemka
Гость
Re: QTreeView и вставка пустых детей родителям
«
Ответ #10 :
Сентябрь 16, 2010, 20:26 »
Цитировать
Данными просто заполняется модель
А что за модель? Стандартная или своя?
Записан
patison
Гость
Re: QTreeView и вставка пустых детей родителям
«
Ответ #11 :
Сентябрь 16, 2010, 21:07 »
Своя. Делал по аналогии с Simple Tree Model example (
http://doc.trolltech.com/4.6/itemviews-simpletreemodel.html
)
Записан
EhTemka
Гость
Re: QTreeView и вставка пустых детей родителям
«
Ответ #12 :
Сентябрь 16, 2010, 21:15 »
Ну и в чем проблема. Вот связь индекса с данными parentItem = static_cast<TreeItem*>(parent.internalPointer());
в TreeItem можно добавить флаг, были ли запрошены данные для детей или нет, и по нему делать проверку в функции hasChildren.
Записан
patison
Гость
Re: QTreeView и вставка пустых детей родителям
«
Ответ #13 :
Сентябрь 16, 2010, 23:52 »
То что нужно! По вашему совету создал флаг в TreeItem, который проверяю в hasChildren(), и в зависимости от него возвращаю true или false. Спасибо.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...