本页内容

QProxyStyle Class

QProxyStyle 类是一个便利类,用于简化对QStyle 元素的动态重写。更多内容...

标题: #include <QProxyStyle>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
继承自: QCommonStyle

公共函数

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

重新实现的公共函数

virtual void drawComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr) const override
virtual void drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override
virtual void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const override
virtual void drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const override
virtual void drawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override
virtual QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const override
virtual QStyle::SubControl hitTestComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, const QPoint &pos, const QWidget *widget = nullptr) const override
virtual QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const override
virtual QRect itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const override
virtual int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const override
virtual int pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const override
virtual void polish(QApplication *app) override
virtual void polish(QPalette &pal) override
virtual void polish(QWidget *widget) override
virtual QSize sizeFromContents(QStyle::ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const override
virtual QIcon standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const override
virtual QPalette standardPalette() const override
virtual QPixmap standardPixmap(QStyle::StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget = nullptr) const override
virtual int styleHint(QStyle::StyleHint hint, const QStyleOption *option = nullptr, const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const override
virtual QRect subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *option, QStyle::SubControl sc, const QWidget *widget) const override
virtual QRect subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const override
virtual void unpolish(QApplication *app) override
virtual void unpolish(QWidget *widget) override

重新实现的受保护函数

virtual bool event(QEvent *e) override

详细说明

QProxyStyle 用于封装QStyle (通常为默认系统样式),以便动态覆盖绘制或其他特定的样式行为。这是在生产应用程序中调整平台样式的推荐方法;请参阅《Qt Widgets 的样式设置方法》。

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

#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 XML 提供的common styles 会遵循此提示,因为它们会调用QStyle::proxy(),但无法保证对于用户定义或系统控制的样式,QStyle::proxy() 一定会被调用。例如,在 macOS 上,由于菜单由操作系统处理,此方法将无法生效。

当需要仅对特定控件设置代理样式时,必须确保不要在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)

创建一个 QProxyStyle 对象,用于覆盖指定style 中的行为;如果未指定style ,则覆盖默认的原生style 中的行为。

style 的所有权将转移给QProxyStyle。

QProxyStyle::QProxyStyle(const QString &key)

构建一个 QProxyStyle 对象,用于覆盖由 stylekey 指定的基样式中的行为;如果指定的样式key 无法识别,则覆盖当前application style 中的行为。

另请参阅 QStyleFactory::create()。

[virtual noexcept] QProxyStyle::~QProxyStyle()

销毁QProxyStyle 对象。

QStyle *QProxyStyle::baseStyle() const

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

另请参阅 setBaseStyle() 和QStyle 。

[override virtual] 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。

[override virtual] 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。

[override virtual] 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。

[override virtual] 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。

[override virtual] 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。

[override virtual protected] bool QProxyStyle::event(QEvent *e)

重写了:QObject::event(QEvent *e)。

[override virtual] 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。

[override virtual] 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。

[override virtual] QRect QProxyStyle::itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const

重写了:QStyle::itemPixmapRect(const QRect &rectangle, int alignment, const QPixmap &pixmap) const。

[override virtual] 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。

[override virtual] 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() 调用,用于确定在布局中control1 和control2 之间应使用的间距。orientation 指定控件是并排布局还是垂直堆叠。option 参数可用于传递有关父控件的额外信息。widget 参数是可选的,当option 为nullptr 时也可使用。

默认实现返回 -1。

另请参阅 combinedLayoutSpacing()。

[override virtual] 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。

[override virtual] void QProxyStyle::polish(QApplication *app)

重写了:QCommonStyle::polish(QApplication *app)。

[override virtual] void QProxyStyle::polish(QPalette &pal)

重写了:QCommonStyle::polish (QPalette &pal)。

[override virtual] void QProxyStyle::polish(QWidget *widget)

重写了:QCommonStyle::polish(QWidget *widget)。

void QProxyStyle::setBaseStyle(QStyle *style)

设置应进行代理的基础样式。

style 的所有权将转移至QProxyStyle 。

如果 style 为nullptr ,系统将自动分配一个与桌面环境相关的样式。

另请参阅 baseStyle()。

[override virtual] 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。

[override virtual] 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 参数是可选的,也可用于辅助查找图标。

[override virtual] QPalette QProxyStyle::standardPalette() const

重新实现了:QStyle::standardPalette() const。

[override virtual] 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。

[override virtual] 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。

[override virtual] 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。

[override virtual] 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。

[override virtual] void QProxyStyle::unpolish(QApplication *app)

重写了:QCommonStyle::unpolish(QApplication *application)。

[override virtual] void QProxyStyle::unpolish(QWidget *widget)

重写了:QCommonStyle::unpolish(QWidget *widget)。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.