Настройка виджетов Qt с помощью стилей
При использовании стилей каждый виджет рассматривается как прямоугольник с четырьмя концентрическими прямоугольниками: прямоугольником отступа, прямоугольником границы, прямоугольником отступа и прямоугольником содержимого. Модель области (box model) описывает это более подробно.
Модель области
Четыре концентрических прямоугольника концептуально представлены ниже:
- Отступ находится за пределами границы.
- Граница отображается между отступом и отступом.
- Отступ находится внутри границы, между границей и самим содержимым.
- Содержимое — это то, что остается от исходного виджета или подэлемента после удаления отступа, границы и отступа.
Свойства отступ, ширина границы и отступ по умолчанию равны нулю. В этом случае все четыре прямоугольника (margin, border, padding, и content) точно совпадают.
Вы можете указать фон для виджета, используя свойство фон-изображение. По умолчанию фон-изображение отображается только для области внутри границы. Это можно изменить, используя свойство фон-обрезать. Вы можете использовать фон-повтор и фон-начало для управления повторением и началом фона изображения.
Фон-изображение не масштабируется вместе с размером виджета. Чтобы обеспечить «кожу» или фон, который масштабируется вместе с размером виджета, необходимо использовать граница-изображение. Поскольку свойство граница-изображение предоставляет альтернативный фон, не требуется указывать фон-изображение, когда задано граница-изображение. В случае, когда оба свойства указаны, граница-изображение отображается поверх фона-изображения.
Кроме того, свойство изображение может использоваться для отображения изображения поверх граница-изображение. Указанное изображение не повторяется и не растягивается, и когда его размер не соответствует размеру виджета, его выравнивание задаётся с помощью свойства изображение-позиция. В отличие от фона-изображение и границы-изображение, вы можете указать SVG в свойстве изображение, в этом случае изображение масштабируется автоматически в соответствии с размером виджета.
Этапы рендеринга правила следующие:
- Установить обрезку для всего процесса рендеринга (радиус-границы).
- Отобразить фон (фон-изображение).
- Отобразить границу (граница-изображение, граница).
- Отобразить наложенное изображение (изображение).
Подэлементы
Виджет рассматривается как иерархия (дерево) подэлементов, отображаемых друг над другом. Например, QComboBox отображает подэлемент раскрывающегося списка, а затем подэлемент вниз-стрелки. Таким образом, QComboBox отображается следующим образом:
- Отобразить правило QComboBox { }
- Отобразить правило QComboBox::drop-down { }
- Отобразить правило QComboBox::down-arrow { }
Подэлементы имеют родительско-дочерние отношения. В случае с QComboBox родителем вниз-стрелки является раскрывающийся список, а родителем раскрывающегося списка является сам виджет. Подэлементы позиционируются внутри родительского элемента с помощью свойств позиция-подэлемента и начало-подэлемента.
После позиционирования подэлементы могут быть стилизованы с помощью модели области.
Примечание: В случае со сложными виджетами, такими как QComboBox и QScrollBar, если один из свойств или подэлементов настраивается, все остальные свойства или подэлементы также должны быть настроены.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/stylesheet-customizing.html