Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
161 / 126 / 30
Регистрация: 30.05.2015
Сообщений: 380
1

QStyledItemDeletate::paint: узнать, раскрыт ли текущий QModelIndex в QTreeView

18.09.2015, 12:02. Показов 1550. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Есть модель, установленная в QTreeView, есть делегат, который как надо отрисовывает.
И собственно хотелка: в void QAbstractItemDelegate:aint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const узнать, если index имеет детей, раскрыт ли он в QTreeView, что бы по разному отрисовывать данные в этих ситуациях.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2015, 12:02
Ответы с готовыми решениями:

Как узнать индекс в QTreeView?
как узнать индекс любой из просматриваемых ячеек в таблице QTreeView?(желательно верхний)Если ни...

Как узнать текущий диск?
Сабж

Как узнать текущий zoom в Webbrowser?
Собственно сабж. Надо откорректировать как-то ширину элемента веббраузера относительно его зума,...

Узнать текущий размер окна MainWindow
Добрый день! Как узнать текущие размеры окна MainWindow после изменения его размеров? ...

4
2 / 2 / 1
Регистрация: 17.09.2015
Сообщений: 10
18.09.2015, 12:52 2
Лучший ответ Сообщение было отмечено Kurles как решение

Решение

Количество детей можно узнать примерно так:
C++ (Qt)
1
const bool hasChildren = (index.model()->rowCount(index) != 0);
Для получения состояния (раскрыт или нет) надо смотреть в сторону:
C++ (Qt)
1
bool QTreeView::isExpanded(const QModelIndex& index) const
0
161 / 126 / 30
Регистрация: 30.05.2015
Сообщений: 380
18.09.2015, 13:01  [ТС] 3
От спасибо. Точно ведь, можно кастануть QStyleOptionViewItem::widget к QTreeView и вытащить эти данные. Еще раз спасибо )
1
205 / 165 / 41
Регистрация: 25.10.2013
Сообщений: 527
18.09.2015, 13:09 4
Цитата Сообщение от Kurles Посмотреть сообщение
Доброго времени суток. Есть модель, установленная в QTreeView, есть делегат, который как надо отрисовывает.
И собственно хотелка: в void QAbstractItemDelegate:aint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const узнать, если index имеет детей, раскрыт ли он в QTreeView, что бы по разному отрисовывать данные в этих ситуациях.
Узнать, есть ли дети - index.model().hasChildren(index);
А вот про раскрыт - вам лучше должно быть известно. Поотслеживайте разницу в QStyleOptionViewItem & option при раскрытии/закрытии элемента. Если её нет, значит придётся её узнавать как-то за рамками стандартных моделей.
1
161 / 126 / 30
Регистрация: 30.05.2015
Сообщений: 380
18.09.2015, 13:13  [ТС] 5
C++ (Qt)
1
2
3
4
5
6
7
8
    bool hasChild = index.model()->rowCount(index);
    bool isExpanded = false;
    if (hasChild) {
        const QTreeView *tw = qobject_cast<const QTreeView*>(option.widget);
        if (tw) {
            isExpanded = tw->isExpanded(index);
        }
    }
Вот так вот получилось.
0
18.09.2015, 13:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2015, 13:13
Помогаю со студенческими работами здесь

Компонент CppWebBrowser, узнать текущий УРЛ
Из какого свойства компонента можна узнать текущий адрес который загружен в окне CppWebBrowser?

Как узнать текущий размер массива
Доброго времени суток. Учебник Сергея Бобровского: Программирование на языке QBasiq. Страница 89....

Как узнать текущий регистр букв
Прверять как-то нужно клавишу Caps Lock? Заодно как вставить символ ' В строку? str:= ''';...

узнать текущий адрес выполнения программы
история такая: есть самодельный загрузчик в F100R8 и надо добавить к нему возможность перепрошить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru