![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
panter_dsd |
![]()
Сообщение
#1
|
![]() Жаждущий знаний ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: ![]() ![]() ![]() |
Как задать свой цвет для курсора? Отнаследовался от QTreeVew и переопределяю:
Но линия рисуется только слева и сверху от итема. После дня Сообщение отредактировал panter_dsd - 14.4.2009, 16:42 |
|
|
![]() |
igor_bogomolov |
![]()
Сообщение
#2
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Под курсором подразумевается пунктирная рамка вокруг итема? Если да, то помню что я случайно менял (в том смысле, что специально я этого не добивался) через QStyleOptionViewItem->palette. Какой именно атрибут - непомню, но если все переберете, найдете.
А то что painter->drawRect(option.rect) не полнстью рисуется, так попробуйте для option.rect сместить его нижнию-правую точку на один пиксел. Должно помоч. |
|
|
panter_dsd |
![]()
Сообщение
#3
|
![]() Жаждущий знаний ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: ![]() ![]() ![]() |
1. А можешь точнее вспомнить?
2. Сместил, не получается. |
|
|
igor_bogomolov |
![]()
Сообщение
#4
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
На память не могу. Сейчас у себя попробую, чуть позже отпишусь
![]() |
|
|
panter_dsd |
![]()
Сообщение
#5
|
![]() Жаждущий знаний ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: ![]() ![]() ![]() |
Проблема решена.
Сообщение отредактировал panter_dsd - 14.4.2009, 19:21 |
|
|
igor_bogomolov |
![]()
Сообщение
#6
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Это самое простое решение - отрисовать рамку через drawRect.
Я ради интереса (подсмотрев в исходниках), изваял следущее
Тоже помоему неплохо ![]() |
|
|
panter_dsd |
![]()
Сообщение
#7
|
![]() Жаждущий знаний ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: ![]() ![]() ![]() |
Тоже интересно. Вот только цвет почему-то нельзя задавать так QColor(Qt::green), рисуется не зеленая рамка.
|
|
|
SABROG |
![]()
Сообщение
#8
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
igor_bogomolov |
![]()
Сообщение
#9
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
А если цвет QPen'a поменять у painter'a? Никак не влияет.Тоже интересно. Вот только цвет почему-то нельзя задавать так QColor(Qt::green), рисуется не зеленая рамка. У меня такое впечатление что цвет там задается следущим образом QColor ( int h, int s, int v), т.е. передавать в HSV. По крайней мере QColor(0,255,255) рисует красным. Другие цвета не проверял.-------------- Проверил двугие цвета. Не получается цвет так задать. Непонятным образом цвет искажается??? Сообщение отредактировал igor_bogomolov - 15.4.2009, 10:49 |
|
|
panter_dsd |
![]()
Сообщение
#10
|
![]() Жаждущий знаний ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: ![]() ![]() ![]() |
Скорее всего цвет подбирается контрастом к другому цвету.
|
|
|
igor_bogomolov |
![]()
Сообщение
#11
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Продублирую из prog.org
Для Windows style, в исходниках цвет преобразуется следущим образом
Поэтому чтобы отображался требуемый цвет, нужно его таким же образом преобразовать обратно
Отрисовку "курсора" сделал так Раскрывающийся текст
Другие стили не смотрел ![]() Сообщение отредактировал igor_bogomolov - 15.4.2009, 13:34 |
|
|
SABROG |
![]()
Сообщение
#12
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Я посмотрел другие стили, там нет такого. Т.ч. логично будет использовать это:
--- Пардон, тут надо текущий стиль проверять, а не ОС, меня что-то переклинило. Сообщение отредактировал SABROG - 15.4.2009, 14:19 |
|
|
igor_bogomolov |
![]()
Сообщение
#13
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
SABROG, если только запускать с родным стилем. А если под виндой запускать c Motif или CDE стилем, опять получим проблемы с цветом.
Поэтому проверку нужно делать только на QWindowsStyle. -------------------------- Добавлено -------------------------- Сейчас попробовал тем же макаром изменить цвет курсора в Motif или CDE стиле. Ничего не вышло. Видимо как-то подругому там все отрисовывается. Копаться дальше лень. Сообщение отредактировал igor_bogomolov - 15.4.2009, 15:12 |
|
|
SABROG |
![]()
Сообщение
#14
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Конечно можно так проверять, но это в некоторой степени не правильно:
Сообщение отредактировал SABROG - 15.4.2009, 19:05 |
|
|
igor_bogomolov |
![]()
Сообщение
#15
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
SABROG, это все понятно. Можно просто проверить унаследован ли QApplication::style() от QWindowsStyle.
Дело в том, что стили Motif и CDE отрисовываются каким-то другим способом. В исходники я не лазил, но установка свойства o.backgroundColor в другой цвет ни к чему не приводит. Рамка всегда остается черной и стиль линии сплошной. Т.е. таким путем добиться универсального решения через drawPrimitive(QStyle::PE_FrameFocusRect, &o, painter) не получается. Проще всего, на самом деле, отрисовать рамку через drawRect, как panter_dsd и сделал. |
|
|
SABROG |
![]()
Сообщение
#16
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Можно просто проверить унаследован ли QApplication::style() от QWindowsStyle. Так чтоль?
В принципе так можно:
Но проблема в том, что указатель будет валидным для всех стилей на базе QWindowsStyle. Т.е. конкретно этот класс хрен локализуешь. Я посмотрел исходники стилей CDE и Motif. Выяснил, что CDE базируется на стиле Motif и использует его средства для отрисовки примитивов, в то время как сам Motif использует QCommonStyle. А внути этого стиля работает такая логика, если цвет в background валидный (isValid), то выбирается один из двух цветов - черный или белый, если же цвет не валидный, то используется цвет из o.palette.foreground().color() уже без изминений. Стало быть повлиять на него можно через паллитру, но при этом цвет в background надо сделать инвалидным каким-то макаром. Сообщение отредактировал SABROG - 15.4.2009, 21:19 |
|
|
igor_bogomolov |
![]()
Сообщение
#17
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
2 SABROG
if(qApp->style()->inherits("QWindowsStyle")) Именно так.Но проблема в том, что указатель будет валидным для всех стилей на базе QWindowsStyle. Так именно это и нужно. Все стили наследущие QWindowsStyle QCleanlooksStyle QPlastiqueStyle QWindowsCEStyle QWindowsVistaStyle QWindowsXPStyle QWindowsMobileStyle используют один и тот же способ отрисовки примитива PE_FrameFocusRect. Собственно в QWindowsStyle он и определен, а остальные стили его не меняют. Т.о. qApp->style()->inherits("QWindowsStyle") идеально подходит, и отображение для всех выше перечисленных стилей будет выглядеть одинаково. Для стилей винды вроде разобрались. Для стилей происходящих от QCommonStyle, я так понимаю, ничего изменить не получится. Кстати, тогда на самом деле получается, что лучше использовать
Сообщение отредактировал igor_bogomolov - 15.4.2009, 23:10 |
|
|
igor_bogomolov |
![]()
Сообщение
#18
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
SABROG |
![]()
Сообщение
#19
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
512 - превышает размеры байта
![]() |
|
|
igor_bogomolov |
![]()
Сообщение
#20
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 21.6.2025, 19:51 |