Мой Рецепт Работы Со Стилями Css В Qt

Вопрос Как я могу свободно назначать разные стили компонентам одного и того же типа (например, QPushButton) в Qt, если я хочу сохранить все стили в одном файле CSS? Да и желательно уметь это делать из QtDesigner (мы не злые самоистязатели, сахар все любят) Немного предыстории вопроса или Бла-бла-бла Так получилось, что большая часть кода в моей жизни была в графическом интерфейсе.

Этот код был написан в разное время на разных языках и платформах.

В результате сейчас я делаю ЭTO на Qt. И до Qt я делал то же самое на Flex (Adobe Flex).

А до этого были WinForms, MFC, VCL и т.д. И все это я вам рассказываю, собственно, с целью: 1) постулируем, что из всего вышеперечисленного Flex оказался наиболее удобным инструментом UI-разработки.

ИМХО: WPF и последние версии Qt это подтверждают, так как перенимают все хорошее от Flex 2) подвести меня к сути проблемы, с которой я столкнулся.

У Flex был довольно удобный инструмент для создания скинов: CSS. Пример использования Flex: в нашем интерфейсе мы хотим использовать зеленые, красные и синие кнопки.

Мы создаем три стиля в файле CSS: greenButton, redButton и blueButton. А дальше мы просто лезем по нашим формам и устанавливаем свойство styleName = «greenButton» для кнопки, которую хотим сделать зеленой (и для других цветов соответственно).

Теперь перейдем к Qt. Здесь также присутствует CSS-механизм и притом здесь он гораздо более функционален.

НО.

Возникает вопрос.

см.

Вопрос Поиск решения Давайте посмотрим на описание Qt css. Есть такое важное понятие как селектор.

Фактически это определенное условие, в зависимости от которого стиль применяется или нет к объекту.

Итак, какие бывают виды селекторов: 1) по типу.

те.

стиль применяется ко всем элементам управления этого типа (например, ко всем объектам типа QPushButton) Меня это совершенно не устраивает. Все мои кнопки относятся к типу QPushButton, но я хочу сделать некоторые из них одним стилем, а некоторые — другим.

Здесь нам нужно сделать одно признание.

Мне стыдно об этом говорить.

Честно.

Но до последнего момента я создавал классы-потомки QPushButton с одной-единственной целью — использовать этот селектор.

Те.

Я создал класс GreenButton: public QPushButton, RedButton :public QButton и т. д. А затем я просто повысил класс QPushButton до одного из своих классов в QTDesigner, в зависимости от того, какой стиль я хочу к нему применить.

Здесь.

Не пинай.

2) по имени.

Никогда не катится.

3) по стоимости какого-либо имущества.

Вот. Это подойдет. Было бы удобно, если бы у QWidget было свойство type tag, где можно было бы написать что угодно, не затрагивая остальную функциональность.

А теперь мой ответ. Мой ответ Совсем недавно я внезапно обнаружил в QtDesigner зеленый крестик.

Нет, он всегда был рядом, я его просто упорно игнорировала.

Оказалось, что этот крест добавляет объекту динамическое свойство.

Ну вот и весь ответ :) Те.

в нашем примере мы просто добавляем свойство greenButton = true для кнопок (к которым мы хотим применить greenButtonStyle) [через QtDesigner или setProperty("greenButton ", QVariant(true));] И в CSS пишем:

QPushButton[greenButton="true"]<br> {<br> greenButtonStyle content;<br> }<br> <br> QPushButton[redButton="true"]<br> {<br> redButtonStyle content;<br> }<br> <br> and so on<br>

Это такое извращение.

Может быть, кто-то знает лучшее решение? Знаешь, что лучше? Рассказывать Теги: #CSS #Qt #Чулан #QSS

Вместе с данным постом часто просматривают: