Таблицы стилей Qt; выцветание, 2D градиент и CSS классы - PullRequest
1 голос
/ 23 сентября 2010

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

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

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

  3. Qt имеет селекторы CSSдля типов (например, QPushButton) и для идентификаторов (например, #mywidgetname), но я не нашел способа выбрать или установить классы.У меня есть несколько QFrames, например, и к определенному подмножеству я хотел бы добавить один конкретный стиль.Должен ли я называть свои кадры одинаково (с одинаковым идентификатором)?Звучит плохо.Но выбор по их типу (QFrame) тоже неправильный ...

Спасибо!

Ответы [ 3 ]

7 голосов
/ 23 сентября 2010
  1. Не использую известный мне CSS.Тем не менее, в Qt есть несколько хороших демонстраций, использующих различные методы (с использованием фреймворка анимации), см., Например, браузер демонстраций / примеров.

  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; }
    
1 голос
/ 18 мая 2016

Я знаю, что это довольно старый вопрос, но недавно у меня была похожая проблема.

Во всяком случае, для "3".Я обнаружил, что вы можете использовать «селектор свойств» в qss и просто установить значение свойства для соответствующих виджетов.

например, в вашем коде C ++:

widget1->setProperty( "StyleClass", "MyCustomLAF" );
widget2->setProperty( "StyleClass", "MyCustomLAF" );

, затем в qss:

QWidget[StyleClass="MyCustomLAF"] { color : purple ; }

Тогда для любого экземпляра QWidget (или производного класса) со свойством «StyleClass», установленным в «MyCustomLAF», будет применен стиль color: purple.Извините, если приведенное ниже объяснение немного запутанно или технически неверно, но я намекаю, что свойство "StyleClass" - это то, что Qt называет "динамическим свойством", которое (по моим словам) означает свойство, которое добавляется к экземпляру QObjectво время выполнения, не будучи зарегистрированным в «meta stuff» с помощью макроса Q_PROPERTY.

0 голосов
/ 23 сентября 2010

Также вы можете выбрать все QFrames для конкретного родителя.

#ParentName > QFrame выберет все QFrames, которые являются потомками # ParentName

#ParentName QFrame выберет все QFrames, содержащиеся в #ParentNameдети

...