Класс 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_ComplexCustomBase } |
| перечисление | StyleOptionType { Type } |
| перечисление | StyleOptionVersion { Version } |
Открытые функции
| QStyleOption(int version = QStyleOption::Version, int type = SO_Default) | |
| QStyleOption(const QStyleOption &other) | |
| ~QStyleOption() | |
| void | initFrom(const QWidget *widget) |
| QStyleOption & | operator=(const QStyleOption &other) |
Открытые переменные
| 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.
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 |
? | 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 |
? | QStyleOptionGroupBox |
QStyleOption::SO_Header |
8 |
QStyleOptionHeader |
QStyleOption::SO_MenuItem |
4 |
QStyleOptionMenuItem |
QStyleOption::SO_ProgressBar |
6 |
QStyleOptionProgressBar |
QStyleOption::SO_RubberBand |
13 |
QStyleOptionRubberBand |
QStyleOption::SO_SizeGrip |
? | QStyleOptionSizeGrip |
QStyleOption::SO_Slider |
? | QStyleOptionSlider |
QStyleOption::SO_SpinBox |
? | QStyleOptionSpinBox |
QStyleOption::SO_Tab |
3 |
QStyleOptionTab |
QStyleOption::SO_TabBarBase |
12 |
QStyleOptionTabBarBase |
QStyleOption::SO_TabWidgetFrame |
11 |
QStyleOptionTabWidgetFrame |
QStyleOption::SO_TitleBar |
? | QStyleOptionTitleBar |
QStyleOption::SO_ToolBar |
14 |
QStyleOptionToolBar |
QStyleOption::SO_ToolBox |
7 |
QStyleOptionToolBox |
QStyleOption::SO_ToolButton |
? | 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(int version = QStyleOption::Version, int type = SO_Default)
Создаёт QStyleOption со специфицированными version и type.
Версия не имеет особого значения для QStyleOption; она может использоваться подклассами для различения различных версий одного и того же типа опции.
Переменная-член state инициализируется значением QStyle::State_None.
QStyleOption::QStyleOption(const QStyleOption &other)
Создает копию other.
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().
QStyleOption &QStyleOption::operator=(const QStyleOption &other)
Присваивает other этому QStyleOption.
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.
Связанные нечлены
T qstyleoption_cast(const QStyleOption *option)
Возвращает T или 0, в зависимости от 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.
T qstyleoption_cast(QStyleOption *option)
Это перегруженная функция.
Возвращает T или 0, в зависимости от типа заданного option.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qstyleoption.html