![]() |
|
![]() ![]() ![]() |
|
AndAnd |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 22.7.2006 Репутация: нет Всего: 1 |
Здравствуйте форумчане!
Помогите решить проблему со стилями отображения в разных ОС. Постановка задачи: Имеется QTreeView, в котором соответственно строится дерево (модель на основе QStandardItemModel). Необходимо в некоторых элементах (QStandardItem) изменить содержимое, т.е. простое SetData("Text", Qt::DisplayRole) не годится, а нужна возможность вставки изображения среди текста (не в начале!!!). При этом необходимо сохранить стили выделения строк для различных ОС. на скриншоте я хотел показать в чём проблема. В классическом теме Windows при выделении строк текст подкрашивается белым (согласно этому стилю), а в стиле Aero цвет текста никак не меняется, при этом имеется прозрасность самого выделения. Мне нужно сделать чтобы при смене темы в моей программе подобные списки отображались согласно выбранного стиля, встроенными средствами QT без подбора цветов для каждой темы и т.д. Используемые средства: Windows 7; MSVC 2008 with Qt integration; Qt ver. 4.4.3 Мое решение: В общем задачу с выделением я решил, а вот с текстом никак не получается. Создал свой делегат унаследованный от QStyledItemDelegate и в нём переопределил метод paint(...), в котором собственно и меняю само содержимое ячеек для отображения. Вот исходники:
вот собственно и весь код моего делегата. Я здесь не стал писать painter->setPen(option.palette.highlightedText());, т.к. цвет всегда белый (не подходит для стиля Aero в Windows 7), самому устанавливать тоже не вижу смысла, т.к. не полутся той универсальности о которой писал выше.
Как я понял вся проблема состоит вот в этой строке initStyleOption(&opt, index); т.е. если бы можно как-то вместо index передать то что я сам нарисовал с помощью painter. Это сообщение отредактировал(а) AndAnd - 13.5.2010, 12:47 Присоединённый файл ( Кол-во скачиваний: 9 ) ![]() |
||||||
|
|||||||
AndAnd |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 22.7.2006 Репутация: нет Всего: 1 |
В общем пришёл к выводу что правильней будет так
теперь остальсо правильно получить v4->palette, которая используется при отрисовке текста и как это сделать я пока не придумал. т.е. повторюсь, а то возможно суть проблемы не понята, конкретно на примерах (см. вложения первого сообщения): 1) для Упрощённого стиля Windows цвет текста при выделении должен быть белым, а индикатор (или как её назвать - полоска) выделения - синим. 2) для стиля Windows Aero цвет текста остаётся прежним, а сам индикатор выделения прозрачный с голубым оттенком ![]() при данном решении правильно работает пункт 2, в первом пункте цвет текста не меняется на белый при выделении. Это сообщение отредактировал(а) AndAnd - 13.5.2010, 14:00 |
|||
|
||||
AndAnd |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 22.7.2006 Репутация: нет Всего: 1 |
Никто помочь не может?
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |