Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Qcss. Изображения саб-контролов у виджетов.

Автор: Andrewshkovskii 9.8.2011, 10:34

Репост http://www.prog.org.ru/topic_19080_0.html.
При изменении CSS у виджета, у когорого есть какие-то саб-контролы (QComboBox - down_arrow и т.д.) убирается CSS текущей темы от ОС.
Т.е. саб-контролы из XP превращаются в саб-контролы из Win'98:
http://rghost.ru/17244901.view
(border : 1px solid red)
Как это можно поправить? т.е. оставить изображение саб-контролов от текущей темы ОС?

Автор: Litkevich Yuriy 9.8.2011, 16:40

Цитата(Andrewshkovskii @ 9.8.2011, 13:34) *
Как это можно поправить?
Цитата
Замечание: В случае сложных виджетов, таких как QComboBox и QScrollBar, если одно свойство или субэлемент управления настраивается, то и все остальные свойства или субэлементы управления также должны настраиваться.
(http://doc.crossplatform.ru/qt/4.7.x/stylesheet-customizing.html#sub-controls)

Автор: ilyabvt 9.8.2011, 17:00

http://www.forum.crossplatform.ru/index.php?showtopic=7278
Вот недавно уже была тема.

Автор: Andrewshkovskii 9.8.2011, 17:26

как-то можно получить текущее изображения для сабконтролов темы ОС из кода??А точнее, как бы этот самый пиксмап да использовать в Qcss?Ведь эти изображения сабконтролов можно получить из QStyle::StandardPixmap?
Если нет, то подскажите , пожалуйста, как быть в случае, что мне надо отобразить визуально то, что пользователь вводи не верную информацию в инпуты?
Плюс к тому-же, где можно посмотреть как выглядят whatsThis и statusTip виджетов?:)

Автор: igor_bogomolov 9.8.2011, 19:33

Цитата(Andrewshkovskii @ 9.8.2011, 18:26) *
как-то можно получить текущее изображения для сабконтролов темы ОС из кода??А точнее, как бы этот самый пиксмап да использовать в Qcss?
средствами qss твоя задача не решаема.

ОФФ:


Я много раз уже писал, что не нужно без надобности этот qss пользовать. Все чего добьетесь - это поломаете нативность отображения вашего приложения под разными платформами и даже разными стилями одной платформы.


Цитата(Andrewshkovskii @ 9.8.2011, 18:26) *
Если нет, то подскажите , пожалуйста, как быть в случае, что мне надо отобразить визуально то, что пользователь вводи не верную информацию в инпуты?
Просто изменяй в нужный момент палитру требуемого виджета (в твоем случае в качестве colorRole будет QPalette::Base)

Цитата(Andrewshkovskii @ 9.8.2011, 18:26) *
Плюс к тому-же, где можно посмотреть как выглядят whatsThis и statusTip виджетов?:)
Уточни, что конкретно ты хочешь?

Автор: Andrewshkovskii 10.8.2011, 8:37

Цитата(igor_bogomolov @ 9.8.2011, 19:33) *
Цитата(Andrewshkovskii @ 9.8.2011, 18:26) *
Если нет, то подскажите , пожалуйста, как быть в случае, что мне надо отобразить визуально то, что пользователь вводи не верную информацию в инпуты?
Просто изменяй в нужный момент палитру требуемого виджета (в твоем случае в качестве colorRole будет QPalette::Base)

Цитата(Andrewshkovskii @ 9.8.2011, 18:26) *
Плюс к тому-же, где можно посмотреть как выглядят whatsThis и statusTip виджетов?:)
Уточни, что конкретно ты хочешь?

Как мне тогда решить идеологический вопрос о том, как отображать инпуты, где введены не верные значения? Через палитру? Хорошо, сейчас погляжу:)
Я предполагал использовать Qcss для визуального отображения , и какое-то из значений statusTip, whatsThis, toolTip для указания, какие же значения в инпут должны попасть. Но я не смог найти как же визуально выглядят statusTip, toopTip показывается с большим оффсетом от виджета..
P.S.: к сожалению, приложения будет работать в основном под виндами.. но и там есть 2 разных стиля (стиль Xp и стиль Vista)

Автор: Andrewshkovskii 11.8.2011, 8:53

С палитрой беда вышла. Если меняешь палитру, то все чилды (например, QCalendarWidget у QDateTimeEdit) тоже её меняет, что не приемлимо. Есть workaround такой :
Положить за виджет QFrame и ему красить границы.
Только проблема с тем, что программно я не нашел как это сделать, т.е. сначала надо найти позицию виджета в лейауте (QGridLayout, QFormLayout, QVbox, QHBox..) но это, видимо, не возможно.
(хотя точнее сказать - нет простого метода это сделать, найти-то перебором всегда можно)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)