Spec-Zone.ru › Qt 6.0

Класс QStyleOption

Класс QStyleOption хранит параметры, используемые функциями QStyle. Подробнее...

Заголовок: #include <QStyleOption>
CMake: find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets)
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.

См. также version и type.

QStyleOption &QStyleOption::operator=(const QStyleOption &other)

Присваивает other этому QStyleOption.

QStyleOption::~QStyleOption()

Удаляет этот объект опции стиля.

void QStyleOption::initFrom(const QWidget *widget)

Инициализирует state, direction, rect, palette, fontMetrics и styleObject на основе указанного widget.

Это вспомогательная функция; члены-переменные также можно инициализировать вручную.

См. также QWidget::layoutDirection(), QWidget::rect(), QWidget::palette(), и QWidget::fontMetrics().

Документация по переменным-членам

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-6.0/qstyleoption.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API