Стили Qt
Стили Qt — мощный механизм, позволяющий настраивать внешний вид виджетов помимо возможностей, предоставляемых наследованием от QStyle. Концепции, терминология и синтаксис стилей Qt сильно вдохновлены каскадными таблицами стилей (CSS) HTML, но адаптированы к миру виджетов.
Темы:
- Обзор
- Синтаксис таблицы стилей
- Интеграция Qt Designer
- Настройка виджетов Qt с помощью таблиц стилей
- Справочник по таблицам стилей Qt
- Примеры таблиц стилей Qt
Обзор
Таблицы стилей — это текстовые спецификации, которые могут быть заданы для всего приложения с помощью QApplication::setStyleSheet() или для конкретного виджета (и его потомков) с помощью QWidget::setStyleSheet(). Если на разных уровнях задано несколько таблиц стилей, Qt выводит эффективную таблицу стилей из всех заданных. Это называется каскадированием.
Например, следующая таблица стилей указывает, что все QLineEdit должны использовать жёлтый цвет фона, а все QCheckBox — красный цвет текста:
QLineEdit { background: yellow }
QCheckBox { color: red }
Для такой настройки таблицы стилей гораздо мощнее, чем QPalette. Например, может показаться заманчивым установить роль QPalette::Button в красный для QPushButton, чтобы получить красную кнопку. Однако это не гарантировало работоспособности для всех стилей, так как авторы стилей ограничены рекомендациями разных платформ и (в Windows и macOS) родным механизмом темы.
С помощью таблиц стилей можно выполнять все виды настроек, которые трудно или невозможно выполнить с помощью QPalette в одиночку. Если вам нужны жёлтые фоны для обязательных полей, красный текст для потенциально разрушительных кнопок или красивые флажки, таблицы стилей — это ответ.
Таблицы стилей применяются поверх текущего стиля виджета, что означает, что ваши приложения будут выглядеть так же, как родные, но будут учтены все ограничения таблиц стилей. В отличие от манипуляций с палитрой, таблицы стилей обеспечивают гарантии: если вы установите цвет фона QPushButton в красный, вы можете быть уверены, что кнопка будет красной в любом стиле на всех платформах. Кроме того, Qt Designer предоставляет интеграцию таблиц стилей, что упрощает просмотр эффектов таблицы стилей в различных стилях виджетов.
Кроме того, таблицы стилей могут использоваться для придания вашему приложению отличительного внешнего вида и ощущения, без необходимости наследования от QStyle. Например, вы можете указать произвольные изображения для радиокнопок и флажков, чтобы выделить их. С помощью этой техники вы также можете добиться небольших настроек, которые обычно требуют наследования от нескольких классов стилей, таких как указание подсказки стиля. Приведенный ниже пример таблицы стилей определяет две отличительные таблицы стилей, которые вы можете попробовать и изменить по своему желанию.
| Тема 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-5.13/stylesheet.html