QProxyStyle Class
QProxyStyle 类是一个方便的类,可简化对QStyle 元素的动态覆盖。更多
Header: | #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 (通常是默认的系统样式),用于动态覆盖绘画或其他特定样式行为。
下面的示例展示了如何在任何平台上覆盖快捷下划线行为:
#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() 会为用户定义或系统控制的样式被调用。例如,它在 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)
构造一个 QProxyStyle 对象,用于覆盖指定style 中的行为,如果未指定style ,则覆盖默认本地style 中的行为。
style 的所有权将转移给 QProxyStyle。
QProxyStyle::QProxyStyle(const QString &key)
构造一个 QProxyStyle 对象,用于覆盖由样式key 指定的基本样式中的行为,如果指定的样式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 QWidgets *widgets) 常量。
此槽由 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) 常量。
[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) 常量。
[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) 常量。
[override virtual]
void QProxyStyle::unpolish(QApplication *app)
重实现:QCommonStyle::unpolish(QApplication *application).
[override virtual]
void QProxyStyle::unpolish(QWidget *widget)
重实现:QCommonStyle::unpolish(QWidget *widget).
© 2025 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.