Styling#
Qt’s built-in widgets use the QStyle
class to perform nearly all of their drawing. QStyle
is 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 QStyle
subclasses 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 mechanism.
Most functions for drawing style elements take four arguments:
an enum value specifying which graphical element to draw
a
QStyleOption
object specifying how and where to render that elementa
QPainter
object that should be used to draw the elementa
QWidget
object on which the drawing is performed (optional)
The style gets all the information it needs to render the graphical element from the QStyleOption
class. 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, QStyle
can 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 QStylePainter
class inheriting from QPainter
. QStylePainter
is a convenience class for drawing QStyle
elements inside a widget, and extends QPainter
with a set of high-level drawing functions implemented on top of QStyle
‘s API. The advantage of using QStylePainter
is that the parameter lists get considerably shorter.
QIcon
The
QIcon
class provides scalable icons in different modes and states.
QIcon
can generate pixmaps reflecting an icon’s state, mode and size. These pixmaps are generated from the set of pixmaps made available to the icon, and are used by Qt widgets to show an icon representing a particular action.The rendering of a
QIcon
object is handled by theQIconEngine
class. Each icon has a corresponding icon engine that is responsible for drawing the icon with a requested size, mode and state.
For more information about widget styling and appearance, see the Styles and Style Aware Widgets .