Qt Stylesheates; Цветовая выцветание, 2D градиентные и CSS-классы
-
04-10-2019 - |
Вопрос
У меня есть несколько вопросов о функциональности qt styleshe листа. Это действительно здорово, но ощущается, что эта особенность уже слишком долго, верна? Это, безусловно, самый простой способ стиль моего графического интерфейса.
Можно ли добавить цвет исчезновение в стилях стилей? Всякий раз, когда мышь охватывает определенный виджет, я не хочу, чтобы это резко меняется цвет фона, просто исчезает в новом цвете в 200 мс или что-то. Есть ли хороший способ для этого, или это должно быть сделано кодовым мудрым?
Могу ли я иметь 2D градиент? Я знаю, как использовать Gradient 1D, вы можете постепенно изменить цвет на одну ось (часто либо по горизонтали, либо вертикально). Я хотел бы добавить второй Градиент на топх, который имеет низкое значение альфа, например. Так что, если ваш градиент идет с зеленого (сверху) на красный (внизу), я также хотел бы пойти от прозрачного (слева) на белый (справа).
QT имеет селекторы CSS для типов (например, QPushbutton) и для ID (например, #mywidgetnameName), но я не нашел способ выбрать или устанавливать классы. У меня есть несколько QFRADE, например, и на определенное подмножество, которое я хотел бы добавить один конкретный стиль. Должен ли я назвать мои рамки все равно (тот же ID)? Звучит плохо. Но выбор на их типе (QFrame) тоже не прав ...
Спасибо!
Решение
Не используя CSS, о которых я знаю. Однако QT имеет несколько хороших демонстрационных демонстраций, использующих различные методы (используя анимационную структуру), см. Например, браузер Demos / Examples.
Возможно, вы можете достичь того, что вы хотите в # 2, используя следующие конструкции, используя относительные координаты конечных точек:
qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0.273, stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255))
Qt Designer имеет хороший редактор для градиентов (и для CSS в целом), вы можете захотеть играть с этим и посмотреть, что он подходит и использует это для вдохновения.
Не совсем уверен, как лучше всего решить, но вы можете поставить несколько совпадений до того же правила, поэтому вы можете иметь:
QFrame#frame1, QFrame#frame2 { background-color: blue; }
Другие советы
Я знаю, что это довольно старый вопрос, но недавно у меня была похожая проблема.
Во всяком случае, для "3." Я обнаружил, что вы можете использовать «селектор свойств» в QSS и просто установите значение свойства на соответствующие виджеты.
Например, в вашем C ++:
widget1->setProperty( "StyleClass", "MyCustomLAF" );
widget2->setProperty( "StyleClass", "MyCustomLAF" );
Затем в QSS:
QWidget[StyleClass="MyCustomLAF"] { color : purple ; }
Тогда любой экземпляр QWidget (или полученный класс) с свойством «STYLECLASS», установленном на «MyCustomlaf», будет иметь цвет: фиолетовый стиль применяется. Простите меня, если следующее объяснение немного запутано или технически неверно, но я подразумеваю, что свойство «Systiclass» - это то, что QT вызывает «динамическое свойство», которое (в моих словах) означает свойство, добавленное к экземпляру Qobject. Во время выполнения, не зарегистрированные в «Meta Table», используя макрос Q_PROPERTY.
Также вы можете выбрать все QFRAMES для конкретного родителя
#ParentName > QFrame
Выберет все QFRAMES, которые являются детьми #parentname
#ParentName QFrame
Выберет все QFRAME, содержащиеся в #parentname, и это дети