QProxyStyle 类

QProxyStyle 类是一个便利类,可简化动态覆盖 QStyle 元素。更多信息...

头文件 #include <QProxyStyle>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
继承 QCommonStyle

公共函数

QProxyStyle(QStyle *style = nullptr)
QProxyStyle(const QString &key)
virtual~QProxyStyle()
QStyle *baseStyle() const
voidsetBaseStyle(QStyle *style)

重实现的公共函数

virtual voiddrawComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr) const override
virtual voiddrawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override
virtual voiddrawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &) const override
virtual voiddrawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const override
virtual voiddrawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override
virtual QPixmapgeneratedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const override
virtual QStyle::SubControlhitTestComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, const QPoint &pos, const QWidget *widget = nullptr) const override
virtual QRectitemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const override
virtual QRectitemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const override
virtual intlayoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const override
virtual intpixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const override
virtual voidpolish(QWidget *widget) override
virtual voidpolish(QPalette &pal) override
virtual voidpolish(QApplication *app) override
virtual QSizesizeFromContents(QStyle::ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const override
virtual QIconstandardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const override
virtual QPalettestandardPalette() const override
virtual QPixmapstandardPixmap(QStyle::StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget = nullptr) const override
virtual intstyleHint(QStyle::StyleHint hint, const QStyleOption *option = nullptr, const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const override
virtual QRectsubControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *option, QStyle::SubControl sc, const QWidget *widget) const override
virtual QRectsubElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const override
virtual voidunpolish(QWidget *widget) override
virtual voidunpolish(QApplication *app) override

重实现保护函数

virtual boolevent(QEvent *e) override

详细描述

QProxyStyle用于封装QStyle(通常是默认系统样式),以动态覆盖绘制或其他特定的样式行为。

以下示例显示了如何在任何平台上覆盖快捷键下划线行为

#include "textedit.h"
#include <QApplication>
#include <QProxyStyle>

class MyProxyStyle : public QProxyStyle
{
  public:
    int styleHint(StyleHint hint, const QStyleOption *option = nullptr,
                  const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const override
    {
        if (hint == QStyle::SH_UnderlineShortcut)
            return 0;
        return QProxyStyle::styleHint(hint, option, widget, returnData);
    }
};

int main(int argc, char **argv)
{
    Q_INIT_RESOURCE(textedit);

    QApplication a(argc, argv);
    a.setStyle(new MyProxyStyle);
    TextEdit mw;
    mw.resize(700, 800);
    mw.show();
    //...
}

警告:Qt提供的常用样式将尊重此提示,因为它们调用了QStyle::proxy(),但无法保证QStyle::proxy()将会被调用用户自定义或系统控制的样式。例如,在Mac上不会工作,因为菜单由操作系统处理。

当需要在特定小部件上设置代理样式时,必须确保不要在由QWidget::style()返回的全局应用程序样式上设置代理。必须为小部件创建一个单独的定制样式,类似于

...
auto proxy = new MyProxyStyle(QApplication::style()->name());
proxy->setParent(widget);   // take ownership to avoid memleak
widget->setStyle(proxy);
...

另请参阅QStyle.

成员函数文档

QProxyStyle::QProxyStyle(QStyle *style = nullptr)

为指定的style构建QProxyStyle对象,以覆盖行为,如果没有指定style,则在默认的本 địa style

style的所有权被转移到QProxyStyle。

QProxyStyle::QProxyStyle(const QString &key)

构建一个QProxyStyle对象,以覆盖由样式key指定的基本样式,如果没有指定样式key,则在每个当前application style

另请参阅QStyleFactory::create().

[虚拟 noexcept] QProxyStyle::~QProxyStyle()

销毁QProxyStyle对象。

QStyle *QProxyStyle::baseStyle() const

返回代理基本样式对象。如果在代理样式中未设置基本样式,QProxyStyle 将创建应用程序样式的实例。

另请参阅setBaseStyle() 和 QStyle

[重写虚函数] void QProxyStyle::drawComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr) const

重写: QCommonStyle::drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget) const.

[重写虚函数] void QProxyStyle::drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const

重写: QCommonStyle::drawControl(QStyle::ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *widget) const.

[重写虚函数] void QProxyStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const

重写: QStyle::drawItemPixmap(QPainter *painter, const QRect &rectangle, int alignment, const QPixmap &pixmap) const.

[重写虚函数] void QProxyStyle::drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const

重写: QStyle::drawItemText(QPainter *painter, const QRect &rectangle, int alignment, const QPalette &palette, bool enabled, const QString &text, QPalette::ColorRole textRole) const.

[重写虚函数] void QProxyStyle::drawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const

重写: QCommonStyle::drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *widget) const.

[重写虚函数] bool QProxyStyle::event(QEvent *e)

重实现:QObject::event(QEvent *e)。

[重载虚函数] QPixmap QProxyStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const

重实现:QCommonStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const

[重载虚函数] QStyle::SubControl QProxyStyle::hitTestComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, const QPoint &pos, const QWidget *widget = nullptr) const

重实现:QCommonStyle::hitTestComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt, const QWidget *widget) const

[重载虚函数] QRect QProxyStyle::itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const

重实现:QStyle::itemPixmapRect(const QRect &rectangle, int alignment, const QPixmap &pixmap) const

[重载虚函数] QRect QProxyStyle::itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const

重实现:QStyle::itemTextRect(const QFontMetrics &metrics, const QRect &rectangle, int alignment, bool enabled, const QString &text) const

[重载虚函数] int QProxyStyle::layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const

重实现:QCommonStyle::layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option, const QWidget *widget) const

此槽由 layoutSpacing() 调用,以确定在布局中应在 control1control2 之间使用的间隔。 orientation 指定控件是并排布局还是垂直堆叠。可以使用 option 参数传递有关父窗口的额外信息。 widget 参数是可选的,如果 optionnullptr,则也可以使用。

默认实现返回 -1。

另请参阅combinedLayoutSpacing

[覆盖虚函数] int QProxyStyle::pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const

重新实现:QCommonStyle::pixelMetric(QStyle::PixelMetric m, const QStyleOption *opt, const QWidget *widget) const.

[覆盖虚函数] void QProxyStyle::polish(QWidget *widget)

重新实现:QCommonStyle::polish(QWidget *widget).

[覆盖虚函数] void QProxyStyle::polish(QPalette &pal)

重新实现:QCommonStyle::polish(QPalette &pal).

[覆盖虚函数] void QProxyStyle::polish(QApplication *app)

重新实现:QCommonStyle::polish(QApplication *app).

void QProxyStyle::setBaseStyle(QStyle *style)

设置要代理的基本样式。

style 的所有权转移给了 QProxyStyle

如果 nullptr,将自动分配依赖桌面风格的样式。

另请参阅baseStyle().

[覆盖虚函数] QSize QProxyStyle::sizeFromContents(QStyle::ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const

重新实现:QCommonStyle::sizeFromContents(QStyle::ContentsType contentsType, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget) const.

[覆盖虚函数] QIcon QProxyStyle::standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const

重新实现:QStyle::standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const.

返回给定 standardIcon 的图标。

QStyle 的子类中重新实现此槽函数以提供您自己的图标。可以使用 option 参数传递找到适当图标所需的信息。可选的 widget 参数也可以用来帮助找到图标。

[覆盖虚函数] QPalette QProxyStyle::standardPalette() const

重新实现:QStyle::standardPalette() const.

[重写虚函数] QPixmap QProxyStyle::standardPixmap(QStyle::StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget = nullptr) const

重新实现: QCommonStyle::standardPixmap(QStyle::StandardPixmap sp, const QStyleOption *option, const QWidget *widget) const.

[重写虚函数] int QProxyStyle::styleHint(QStyle::StyleHint hint, const QStyleOption *option = nullptr, const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const

重新实现: QCommonStyle::styleHint(QStyle::StyleHint sh, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *hret) const.

[重写虚函数] QRect QProxyStyle::subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *option, QStyle::SubControl sc, const QWidget *widget) const

重新实现: QCommonStyle::subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget) const.

[重写虚函数] QRect QProxyStyle::subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const

重新实现: QCommonStyle::subElementRect(QStyle::SubElement sr, const QStyleOption *opt, const QWidget *widget) const.

[重写虚函数] void QProxyStyle::unpolish(QWidget *widget)

重新实现: QCommonStyle::unpolish(QWidget *widget).

[重写虚函数] void QProxyStyle::unpolish(QApplication *app)

重新实现: QCommonStyle::unpolish(QApplication *application).

© 2024 The Qt Company Ltd. 本文档中包含的贡献均为各自所有者的版权。本文档受GNU自由文档许可证版本1.3的条款许可,由自由软件基金会发布。Qt和相应的徽标是芬兰及全球其他地区的The Qt Company Ltd的商标。所有其他商标均为各自所有者的财产。