Стили Qt
Стили Qt — мощный механизм, позволяющий настраивать внешний вид виджетов, помимо возможностей, предоставляемых наследованием от QStyle. Концепции, терминология и синтаксис стилей Qt сильно вдохновлены каскадными таблицами стилей (CSS) HTML http://www.w3.org/Style/CSS/, но адаптированы к миру виджетов.
Темы:
- Обзор
- Синтаксис таблиц стилей
- Интеграция с Qt Designer
- Настройка виджетов Qt с помощью таблиц стилей
- Справочник по таблицам стилей Qt
- Примеры таблиц стилей Qt
Примечание: Если стили Qt используются для одного и того же виджета вместе с функциями, устанавливающими внешний вид виджетов, такими как QWidget::setFont() или QTreeWidgetItem::setBackground(), стили Qt будут иметь приоритет в случае конфликта настроек.
Обзор
Таблицы стилей — это текстовые спецификации, которые могут быть установлены для всего приложения с помощью QApplication::setStyleSheet() или для конкретного виджета (и его дочерних элементов) с помощью QWidget::setStyleSheet(). Если несколько таблиц стилей установлены на разных уровнях, Qt выводит эффективную таблицу стилей из всех установленных. Это называется каскадированием.
Например, следующая таблица стилей определяет, что все QLineEdit должны использовать желтый цвет фона, а все QCheckBox — красный цвет текста:
QLineEdit { background: yellow }
QCheckBox { color: red }
Для этого вида настройки таблицы стилей намного мощнее, чем QPalette. Например, может показаться заманчивым установить роль QPalette::Button в красный для QPushButton, чтобы получить красную кнопку. Однако это не гарантировало бы работу для всех стилей, так как авторы стилей ограничены рекомендациями различных платформ и (в Windows и macOS) механизмом родной темы.
Стили Qt позволяют выполнять все виды настроек, которые сложно или невозможно выполнить с помощью QPalette в одиночку. Если вам нужны жёлтые фоны для обязательных полей, красный текст для потенциально разрушительных кнопок или стильные флажки, стили Qt — это ответ.
Стили применяются поверх текущего стиля виджета, что означает, что ваши приложения будут выглядеть так же, как родные, но будут учтены все ограничения таблиц стилей. В отличие от изменения палитры, стили Qt предоставляют гарантии: если вы установите цвет фона QPushButton в красный, вы можете быть уверены, что кнопка будет иметь красный фон во всех стилях на всех платформах. Кроме того, Qt Designer предоставляет интеграцию со стилями, что облегчает просмотр эффектов таблицы стилей в разных стилях виджетов.
Кроме того, таблицы стилей можно использовать для придания уникального внешнего вида и ощущения вашему приложению, не прибегая к наследованию от QStyle. Например, вы можете указать произвольные изображения для радиокнопок и флажков, чтобы они выделялись. С помощью этой техники вы также можете добиться незначительных настроек, которые обычно требуют наследования от нескольких классов стилей, таких как указание подсказки стиля style hint. Пример таблицы стилей, изображенный ниже, определяет две отличительные таблицы стилей, которые вы можете опробовать и изменять по своему усмотрению.
| Тема Pagefold, работающая в Windows |
| Тема Coffee, работающая в Ubuntu Linux | Тема Pagefold, работающая в macOS |
Когда активна таблица стилей, QStyle, возвращаемый QWidget::style(), является оболочкой "стиля таблицы стилей", а не платформенно-специфическим стилем. Стиль-оболочка гарантирует соблюдение любой активной таблицы стилей и в противном случае перенаправляет операции рисования на основной платформенно-специфический стиль (например, QWindowsVistaStyle в Windows).
Начиная с Qt 4.5, стили Qt полностью поддерживают macOS.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/stylesheet.html