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 (QWidget * widget ) override |
virtual void | polish (QPalette & pal ) override |
virtual void | polish (QApplication * app ) 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 (QWidget * widget ) override |
virtual void | unpolish (QApplication * app ) override |
virtual bool | event (QEvent * e ) override |
QProxyStyle 包裹 QStyle (usually the default system style) for the purpose of dynamically overriding painting or other specific style behavior.
The following example shows how to override the shortcut underline behavior on any platform:
#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(); //... }
警告: common styles provided by Qt will respect this hint, because they call QStyle::proxy (), but there is no guarantee that QStyle::proxy () will be called for user defined or system controlled styles. It would not work on a Mac, for example, where menus are handled by the operating system.
When a proxy style should be set on a specific widget only, you have to make sure to not set the proxy on the global application style which is returned by QWidget::style (). You have to create a separate custom style for the widget similar to:
... auto proxy = new MyProxyStyle(QApplication::style()->name()); proxy->setParent(widget); // take ownership to avoid memleak widget->setStyle(proxy); ...
另请参阅 QStyle .
Constructs a QProxyStyle object for overriding behavior in the specified style , or in the default native style if style is not specified.
所有权对于 style is transferred to QProxyStyle.
Constructs a QProxyStyle object for overriding behavior in the base style specified by style key , or in the current application style if the specified style key is unrecognized.
另请参阅 QStyleFactory::create ().
[virtual noexcept]
QProxyStyle::
~QProxyStyle
()
销毁 QProxyStyle 对象。
Returns the proxy base style object. If no base style is set on the proxy style, QProxyStyle will create an instance of the application style instead.
另请参阅 setBaseStyle () 和 QStyle .
[override virtual]
void
QProxyStyle::
drawComplexControl
(
QStyle::ComplexControl
control
, const
QStyleOptionComplex
*
option
,
QPainter
*
painter
, const
QWidget
*
widget
= nullptr) const
[override virtual]
void
QProxyStyle::
drawControl
(
QStyle::ControlElement
element
, const
QStyleOption
*
option
,
QPainter
*
painter
, const
QWidget
*
widget
= nullptr) const
[override virtual]
void
QProxyStyle::
drawItemPixmap
(
QPainter
*
painter
, const
QRect
&
rect
,
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
[override virtual]
void
QProxyStyle::
drawPrimitive
(
QStyle::PrimitiveElement
element
, const
QStyleOption
*
option
,
QPainter
*
painter
, const
QWidget
*
widget
= nullptr) 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
[override virtual]
QStyle::SubControl
QProxyStyle::
hitTestComplexControl
(
QStyle::ComplexControl
control
, const
QStyleOptionComplex
*
option
, const
QPoint
&
pos
, const
QWidget
*
widget
= nullptr) 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
[override virtual]
int
QProxyStyle::
layoutSpacing
(
QSizePolicy::ControlType
control1
,
QSizePolicy::ControlType
control2
,
Qt::Orientation
orientation
, const
QStyleOption
*
option
= nullptr, const
QWidget
*
widget
= nullptr) const
This slot is called by layoutSpacing() to determine the spacing that should be used between
control1
and
control2
in a layout.
orientation
specifies whether the controls are laid out side by side or stacked vertically. The
option
parameter can be used to pass extra information about the parent widget. The
widget
parameter is optional and can also be used if
option
is
nullptr
.
The default implementation returns -1.
另请参阅 combinedLayoutSpacing ().
[override virtual]
int
QProxyStyle::
pixelMetric
(
QStyle::PixelMetric
metric
, const
QStyleOption
*
option
= nullptr, const
QWidget
*
widget
= nullptr) const
[override virtual]
void
QProxyStyle::
polish
(
QWidget
*
widget
)
重实现: QCommonStyle::polish (QWidget *widget).
[override virtual]
void
QProxyStyle::
polish
(
QPalette
&
pal
)
重实现: QCommonStyle::polish (QPalette &pal).
[override virtual]
void
QProxyStyle::
polish
(
QApplication
*
app
)
重实现: QCommonStyle::polish (QApplication *app).
Sets the base style that should be proxied.
所有权对于 style is transferred to QProxyStyle .
If style is
nullptr
, a desktop-dependent style will be assigned automatically.
另请参阅 baseStyle ().
[override virtual]
QSize
QProxyStyle::
sizeFromContents
(
QStyle::ContentsType
type
, const
QStyleOption
*
option
, const
QSize
&
size
, const
QWidget
*
widget
) const
[override virtual]
QIcon
QProxyStyle::
standardIcon
(
QStyle::StandardPixmap
standardIcon
, const
QStyleOption
*
option
= nullptr, const
QWidget
*
widget
= nullptr) const
返回图形为给定 standardIcon .
Reimplement this slot to provide your own icons in a QStyle subclass. The option argument can be used to pass extra information required to find the appropriate icon. The widget argument is optional and can also be used to help find the icon.
[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
[override virtual]
int
QProxyStyle::
styleHint
(
QStyle::StyleHint
hint
, const
QStyleOption
*
option
= nullptr, const
QWidget
*
widget
= nullptr,
QStyleHintReturn
*
returnData
= nullptr) const
[override virtual]
QRect
QProxyStyle::
subControlRect
(
QStyle::ComplexControl
cc
, const
QStyleOptionComplex
*
option
,
QStyle::SubControl
sc
, const
QWidget
*
widget
) const
[override virtual]
QRect
QProxyStyle::
subElementRect
(
QStyle::SubElement
element
, const
QStyleOption
*
option
, const
QWidget
*
widget
) const
[override virtual]
void
QProxyStyle::
unpolish
(
QWidget
*
widget
)
重实现: QCommonStyle::unpolish (QWidget *widget).
[override virtual]
void
QProxyStyle::
unpolish
(
QApplication
*
app
)
重实现: QCommonStyle::unpolish (QApplication *application).