Qt’s built-in widgets use the
QStyleclass to perform nearly all of their drawing.
QStyleis an abstract base class that encapsulates the look and feel of a GUI, and can be used to make the widgets look exactly like the equivalent native widgets or to give the widgets a custom look.
Qt provides a set of
QStylesubclasses that emulate the native look of the different platforms supported by Qt (QWindowsStyle, QMacStyle, etc.). These styles are built into the Qt GUI module, other styles can be made available using Qt’s plugin mechansim.
Most functions for drawing style elements take four arguments:
an enum value specifying which graphical element to draw
QStyleOptionobject specifying how and where to render that element
QPainterobject that should be used to draw the element
QWidgetobject on which the drawing is performed (optional)
The style gets all the information it needs to render the graphical element from the
QStyleOptionclass. The widget is passed as the last argument in case the style needs it to perform special effects (such as animated default buttons on macOS), but it isn’t mandatory. In fact,
QStylecan be used to draw on any paint device (not just widgets), in which case the widget argument is a zero pointer.
The paint system also provides the
QStylePainterclass inheriting from
QStylePainteris a convenience class for drawing
QStyleelements inside a widget, and extends
QPainterwith a set of high-level drawing functions implemented on top of
QStyle‘s API. The advantage of using
QStylePainteris that the parameter lists get considerably shorter.
For more information about widget styling and appearance, see the Styles and Style Aware Widgets .
© 2020 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.