Вопрос Как я могу свободно назначать разные стили компонентам одного и того же типа (например, 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
-
Королевский Посланник – Путь К Успеху
19 Oct, 24 -
Php В Командной Строке
19 Oct, 24 -
Антипаттерны Devops-Собеседований
19 Oct, 24 -
Motorola Droid Был Полностью Взломан
19 Oct, 24 -
Как Изучить Протокол Http
19 Oct, 24