![]() |
|
![]() ![]() ![]() |
|
newbie2009 |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 8.2.2009 Репутация: нет Всего: нет |
Добрый день!
Собственно, что я хочу получить изображено на рисунке: http://s1.ipicture.ru/Gallery/Viewfull/11853402.html Соотв. для начала вопрос как это вообще лучше сделать: 1. Определив свой делегат и там в методе paint делать как-то так:
И соотв. получаю вот такое: http://s1.ipicture.ru/Gallery/Viewfull/11853470.html Но тогда получается, что если у TreeWidgetItem'a есть дети, то тогда прямоугольник не будет дорисовавываться до конца и тогда на каждом шаге надо как-то дорисовывать линию.... 2. Как-то для этого использовать CSS, пробывал для этого из док-ов взять след:
Но в этом случаи, оно не получается так, что бы строчка охватывалась полностью,как нарисовано на 1м рисунке. Может я что-то не правильно делаю или в данном случаи CSS не подойдет. Как мне поступить, может поможете примера кода, если кто уже подобное делал. Спасибо за внимание. Буду рад любой помощи. |
||||
|
|||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Что хочешь получить - не очень понятно. Сграбрен экран и мышкой начеряканы линии.
paint лучше писать так (чтобы поддерживался текущий стиль виджетов)
|
|||
|
||||
newbie2009 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 8.2.2009 Репутация: нет Всего: нет |
Вот я хочу что бы именно они и рисовались эти начеряканные линии. Я хочу, что бы каждый QTreeWidgetItem был нарисован в прямоугольнике с закругленным слева краями... Но при этом, если я раскрою QTreeWidgetItem и у него там есть дети, то, что бы этот прямоуголник был как бы общий для всех детей и на каждом в частности отдельно. До отрытия: ------------- | + item1 | ------------- После открытия: ------------------ | - item1 | | ---------- | | | item1| | | ---------- | ----------------- - Вот посмотритет этот пример. Видете для самого верхнего элемента прямоугольник не дорисован, а я хочу, что бы он был дорисован и еще охаватывал вложенный в него Item вот такое надо - http://forums.arm.com/uploads/monthly_03_2...19727_thumb.png http://www.youtube.com/watch?v=LgRHpRI6C_4 Или это все лучше делать не используя QTreeWidget вообще? Может какой-то другой компонент подойдет или вообще надо писать свой? Это сообщение отредактировал(а) newbie2009 - 14.7.2012, 23:15 Присоединённый файл ( Кол-во скачиваний: 2 ) ![]() |
|||
|
||||
math64 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Видимо, придётся писать свой класс, производный от QTreeView (лучше QTreeView, а не QTreeWidget) и переопределять методы
см. исходники QTreeView Высота строк будет зависеть от того, есть ли дочерние узлы, свернуты или развернуты они и глубины вложения, поэтому:
предстоит довольно сложная работа. Добавлено через 8 минут и 41 секунду По возможности, используй стили. Первая колонка таблицы должна выглядеть как закладки QTabWidget, расположенные слева. Но у QTabWidget не предумотренно размещение закладок одна внутри другой. |
||||
|
|||||
newbie2009 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 8.2.2009 Репутация: нет Всего: нет |
Это мне получается надо как-то подсовывать нужный мне option внутри переопределннеых ф-ии, к-ые написаны в предищем посте?
Т.е. в переопределенной ф-ии, я как-то коректирую option,а потом делаю QTreeView::drawRow(...,myOption, ...) . Правильно? Или надо брать полностью код из исходников Qt, вставлять в свои переоперделенный ф-ии и там что-то переделывать? Или вначале вызывать ф-ии базового класса, а потом дорисовывать все что мне надо? Это сообщение отредактировал(а) newbie2009 - 15.7.2012, 13:35 |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Да, нужно смотреть исходники, и переlделывать под себя.
Если получится - используй стили, если нет - рисуй напрямую в painter. Колонки начиная со второй, можно рисовать как в базовом классе (но с учётом что высота строки увеличилась). Если сделать
то и при прорисовке первой колонке получишь доступ ко всему пространству первой колонки, и можно попробовать прорисовать делегатом, но тогда со стилями не получится - соответствующий Tab при раскрытом узле занимает несколько ячеек. Возможно, лучше добавить вертикальный заголовок (у стандартного дерева есть только горизонтальный, а у таблицы есть оба) и рисовать Tab'ы в нём. При пользовании стилями, нужно найти текущий стиль, заполнить объект QStyleOption (свой для каждого примитива и комплекного контрола), для табов - QStyleOptionTabV3, QStyleOptionTabBarBaseV2, QStyleOptionTabWidgetFrameV2 и вызвать drawPrimitive(), drawControl() или drawComplexControl() Примитивы для табов: PE_FrameTabWidget, Для контролы для табов CE_TabBarTab, CE_TabBarTabShape, CE_TabBarTabLabel. Метрики для табов - pixelMetric() PM_TabBarTabOverlap, PM_TabBarTabHSpace, PM_TabBarTabVSpace, PM_TabBarBaseHeight, PM_TabBarBaseOverlap, |
|||
|
||||
spyswamp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
QStyledItemDelegate + QSS. Читай доки, извращайся как душе угодно. Хоть треугольные строки с зубчатыми краями делай.
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |