Qt Stylesheates; Цветовая выцветание, 2D градиентные и CSS-классы

StackOverflow https://stackoverflow.com/questions/3774459

Вопрос

У меня есть несколько вопросов о функциональности qt styleshe листа. Это действительно здорово, но ощущается, что эта особенность уже слишком долго, верна? Это, безусловно, самый простой способ стиль моего графического интерфейса.

  1. Можно ли добавить цвет исчезновение в стилях стилей? Всякий раз, когда мышь охватывает определенный виджет, я не хочу, чтобы это резко меняется цвет фона, просто исчезает в новом цвете в 200 мс или что-то. Есть ли хороший способ для этого, или это должно быть сделано кодовым мудрым?

  2. Могу ли я иметь 2D градиент? Я знаю, как использовать Gradient 1D, вы можете постепенно изменить цвет на одну ось (часто либо по горизонтали, либо вертикально). Я хотел бы добавить второй Градиент на топх, который имеет низкое значение альфа, например. Так что, если ваш градиент идет с зеленого (сверху) на красный (внизу), я также хотел бы пойти от прозрачного (слева) на белый (справа).

  3. QT имеет селекторы CSS для типов (например, QPushbutton) и для ID (например, #mywidgetnameName), но я не нашел способ выбрать или устанавливать классы. У меня есть несколько QFRADE, например, и на определенное подмножество, которое я хотел бы добавить один конкретный стиль. Должен ли я назвать мои рамки все равно (тот же ID)? Звучит плохо. Но выбор на их типе (QFrame) тоже не прав ...

Спасибо!

Это было полезно?

Решение

  1. Не используя CSS, о которых я знаю. Однако QT имеет несколько хороших демонстрационных демонстраций, использующих различные методы (используя анимационную структуру), см. Например, браузер Demos / Examples.

  2. Возможно, вы можете достичь того, что вы хотите в # 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 в целом), вы можете захотеть играть с этим и посмотреть, что он подходит и использует это для вдохновения.

  3. Не совсем уверен, как лучше всего решить, но вы можете поставить несколько совпадений до того же правила, поэтому вы можете иметь:

    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, и это дети

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top