Класс QStyleOption
Класс QStyleOption хранит параметры, используемые функциями QStyle. Подробнее...
| Заголовок: | #include <QStyleOption> |
| qmake: | QT += widgets |
| Наследуется от: | QStyleOptionButton, QStyleOptionComplex, QStyleOptionDockWidget, QStyleOptionFocusRect, QStyleOptionFrame, QStyleOptionGraphicsItem, QStyleOptionHeader, QStyleOptionMenuItem, QStyleOptionProgressBar, QStyleOptionRubberBand, QStyleOptionTab, QStyleOptionTabBarBase, QStyleOptionTabWidgetFrame, QStyleOptionToolBar, QStyleOptionToolBox и QStyleOptionViewItem |
Публичные типы
| перечисление | OptionType { SO_Button, SO_ComboBox, SO_Complex, SO_Default, SO_DockWidget, …, SO_ComplexCustomBase } |
| перечисление | StyleOptionType { Type } |
| перечисление | StyleOptionVersion { Version } |
Публичные функции
| QStyleOption(const QStyleOption &other) | |
| QStyleOption(int version = QStyleOption::Version, int type = SO_Default) | |
| QStyleOption & | operator=(const QStyleOption &other) |
| ~QStyleOption() | |
| void | initFrom(const QWidget *widget) |
Публичные переменные
| Qt::LayoutDirection | direction |
| QFontMetrics | fontMetrics |
| QPalette | palette |
| QRect | rect |
| QStyle::State | state |
| QObject * | styleObject |
| int | type |
| int | version |
Связанные нечлены
| T | qstyleoption_cast(const QStyleOption *option) |
| T | qstyleoption_cast(QStyleOption *option) |
Подробное описание
QStyleOption и его подклассы содержат всю информацию, необходимую функциям QStyle для рисования графического элемента.
Для повышения производительности в нём мало функций-членов, и доступ к переменным-членам осуществляется напрямую (т. е. с помощью оператора . или ->). Такой низкоуровневый подход делает структуры простыми в использовании и подчеркивает, что это просто параметры, используемые функциями стиля.
Вызывающая функция QStyle обычно создает объекты QStyleOption на стеке. Это в сочетании с широким использованием Qt неявного совместного использования для типов, таких как QString, QPalette и QColor, гарантирует, что не происходит ненужного выделения памяти.
Следующий фрагмент кода демонстрирует, как использовать конкретный подкласс QStyleOption для рисования кнопки:
void MyPushButton::paintEvent(QPaintEvent *)
{
QStyleOptionButton option;
option.initFrom(this);
option.state = isDown() ? QStyle::State_Sunken : QStyle::State_Raised;
if (isDefault())
option.features |= QStyleOptionButton::DefaultButton;
option.text = text();
option.icon = icon();
QPainter painter(this);
style()->drawControl(QStyle::CE_PushButton, &option, &painter, this);
} В нашем примере элемент управления — QStyle::CE_PushButton, и согласно документации QStyle::drawControl() соответствующий класс — QStyleOptionButton.
При повторной реализации функций QStyle, которые принимают параметр QStyleOption, вам часто нужно привести QStyleOption к подклассу. Для безопасности вы можете использовать qstyleoption_cast(), чтобы убедиться, что тип указателя правильный. Например:
void MyStyle::drawPrimitive(PrimitiveElement element,
const QStyleOption *option,
QPainter *painter,
const QWidget *widget)
{
if (element == PE_FrameFocusRect) {
const QStyleOptionFocusRect *focusRectOption =
qstyleoption_cast<const QStyleOptionFocusRect *>(option);
if (focusRectOption) {
// ...
}
}
// ...
} Функция qstyleoption_cast() вернет 0, если объект, на который option указывает, не имеет нужного типа.
Пример использования вариантов стиля см. в примере Styles.
См. также QStyle и QStylePainter.
Документация по типу-члена
перечисление QStyleOption::OptionType
Это перечисление используется внутри QStyleOption, его подклассами и функцией qstyleoption_cast() для определения типа варианта стиля. Как правило, вам не нужно беспокоиться об этом, если только вы не хотите создать свой собственный подкласс QStyleOption и свои собственные стили.
| Постоянная | Значение | Описание |
|---|---|---|
QStyleOption::SO_Button |
2 |
QStyleOptionButton |
QStyleOption::SO_ComboBox |
0xf0004 |
QStyleOptionComboBox |
QStyleOption::SO_Complex |
0xf0000 |
QStyleOptionComplex |
QStyleOption::SO_Default |
0 |
QStyleOption |
QStyleOption::SO_DockWidget |
9 |
QStyleOptionDockWidget |
QStyleOption::SO_FocusRect |
1 |
QStyleOptionFocusRect |
QStyleOption::SO_Frame |
5 |
QStyleOptionFrame |
QStyleOption::SO_GraphicsItem |
15 |
QStyleOptionGraphicsItem |
QStyleOption::SO_GroupBox |
0xf0006 |
QStyleOptionGroupBox |
QStyleOption::SO_Header |
8 |
QStyleOptionHeader |
QStyleOption::SO_MenuItem |
4 |
QStyleOptionMenuItem |
QStyleOption::SO_ProgressBar |
6 |
QStyleOptionProgressBar |
QStyleOption::SO_RubberBand |
13 |
QStyleOptionRubberBand |
QStyleOption::SO_SizeGrip |
0xf0007 |
QStyleOptionSizeGrip |
QStyleOption::SO_Slider |
0xf0001 |
QStyleOptionSlider |
QStyleOption::SO_SpinBox |
0xf0002 |
QStyleOptionSpinBox |
QStyleOption::SO_Tab |
3 |
QStyleOptionTab |
QStyleOption::SO_TabBarBase |
12 |
QStyleOptionTabBarBase |
QStyleOption::SO_TabWidgetFrame |
11 |
QStyleOptionTabWidgetFrame |
QStyleOption::SO_TitleBar |
0xf0005 |
QStyleOptionTitleBar |
QStyleOption::SO_ToolBar |
14 |
QStyleOptionToolBar |
QStyleOption::SO_ToolBox |
7 |
QStyleOptionToolBox |
QStyleOption::SO_ToolButton |
0xf0003 |
QStyleOptionToolButton |
QStyleOption::SO_ViewItem |
10 |
QStyleOptionViewItem (используется в интервью) |
Следующие значения используются для пользовательских элементов управления:
| Постоянная | Значение | Описание |
|---|---|---|
QStyleOption::SO_CustomBase |
0xf00 |
Зарезервировано для пользовательских QStyleOptions; все значения пользовательских элементов управления должны быть выше этого значения |
QStyleOption::SO_ComplexCustomBase |
0xf000000 |
Зарезервировано для пользовательских QStyleOptions; все значения пользовательских сложных элементов управления должны быть выше этого значения |
См. также тип.
перечисление QStyleOption::StyleOptionType
Это перечисление используется для хранения информации о типе стилистического параметра и определяется для каждого подкласса QStyleOption.
| Постоянная | Значение | Описание |
|---|---|---|
QStyleOption::Type |
SO_Default |
Тип предоставленного стилистического параметра (SO_Default для этого класса). |
Тип используется внутри QStyleOption, его подклассами и qstyleoption_cast() для определения типа стилистического параметра. Как правило, вам не нужно об этом беспокоиться, если только вы не хотите создать свой собственный подкласс QStyleOption и свой собственный стиль.
См. также StyleOptionVersion.
перечисление QStyleOption::StyleOptionVersion
Это перечисление используется для хранения информации о версии стилистического параметра и определяется для каждого подкласса QStyleOption.
| Постоянная | Значение | Описание |
|---|---|---|
QStyleOption::Version |
1 |
1 |
Версия используется подклассами QStyleOption для реализации расширений без нарушения совместимости. Если вы используете qstyleoption_cast(), вам обычно не нужно проверять ее.
См. также StyleOptionType.
Документация по функциям-членам
QStyleOption::QStyleOption(const QStyleOption &other)
Создаёт копию other.
QStyleOption::QStyleOption(int version = QStyleOption::Version, int type = SO_Default)
Создаёт QStyleOption с указанной version и type.
Версия не имеет специального значения для QStyleOption; она может использоваться подклассами для различения различных версий одного и того же типа параметра.
Переменная-член state инициализируется значением QStyle::State_None.
QStyleOption &QStyleOption::operator=(const QStyleOption &other)
Присваивает other этому QStyleOption.
QStyleOption::~QStyleOption()
Удаляет этот объект стилистического параметра.
void QStyleOption::initFrom(const QWidget *widget)
Инициализирует переменные-члены state, direction, rect, palette, fontMetrics и styleObject на основе указанного widget.
Это удобная функция; переменные-члены также могут быть инициализированы вручную.
Функция была введена в Qt 4.1.
См. также QWidget::layoutDirection(), QWidget::rect(), QWidget::palette(), и QWidget::fontMetrics().
END_OF_DOCUMENT_MARKERДокументация по переменным-членам
Qt::LayoutDirection QStyleOption::direction
Эта переменная хранит направление вывода текста, которое должно использоваться при отрисовке текста в элементе управления.
По умолчанию, направление вывода текста — Qt::LeftToRight.
См. также initFrom().
QFontMetrics QStyleOption::fontMetrics
Эта переменная хранит метрики шрифта, которые должны использоваться при отрисовке текста в элементе управления.
По умолчанию используется шрифт по умолчанию приложения.
См. также initFrom().
QPalette QStyleOption::palette
Эта переменная хранит палитру, которая должна использоваться при отрисовке элемента управления.
По умолчанию используется палитра по умолчанию приложения.
См. также initFrom().
QRect QStyleOption::rect
Эта переменная хранит область, которая должна использоваться для различных вычислений и отрисовки.
Значение может иметь разный смысл для разных типов элементов. Например, для элемента QStyle::CE_PushButton это прямоугольник для всей кнопки, а для элемента QStyle::CE_PushButtonLabel — только область для метки кнопки.
Значение по умолчанию — нулевой прямоугольник, т.е. прямоугольник с шириной и высотой 0.
См. также initFrom().
QStyle::State QStyleOption::state
Эта переменная хранит флаги стиля, используемые при отрисовке элемента управления.
Значение по умолчанию — QStyle::State_None.
См. также initFrom(), QStyle::drawPrimitive(), QStyle::drawControl(), QStyle::drawComplexControl(), и QStyle::State.
QObject *QStyleOption::styleObject
Эта переменная хранит объект, которому применяется стиль.
Встроенные стили поддерживают следующие типы: QWidget, QGraphicsObject и QQuickItem.
См. также initFrom().
int QStyleOption::type
Эта переменная хранит тип опции стиля.
Значение по умолчанию — SO_Default.
См. также OptionType.
int QStyleOption::version
Эта переменная хранит версию опции стиля.
Это значение может использоваться подклассами для реализации расширений без нарушения совместимости. Если вы используете функцию qstyleoption_cast(), обычно проверять его не нужно.
Значение по умолчанию — 1.
Связанные нечлены
template <typename T> T qstyleoption_cast(const QStyleOption *option)
Возвращает T или nullptr в зависимости от type и version данного option.
Пример:
void MyStyle::drawPrimitive(PrimitiveElement element,
const QStyleOption *option,
QPainter *painter,
const QWidget *widget)
{
if (element == PE_FrameFocusRect) {
const QStyleOptionFocusRect *focusRectOption =
qstyleoption_cast<const QStyleOptionFocusRect *>(option);
if (focusRectOption) {
// ...
}
}
// ...
} См. также QStyleOption::type и QStyleOption::version.
template <typename T> T qstyleoption_cast(QStyleOption *option)
Это перегруженная функция.
Возвращает T или nullptr в зависимости от типа данного option.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qstyleoption.html