我有自己的小部件MyToolButton,它继承自QToolButton
。在paintEvent中,我想从原始QToolButton
中仅绘制“背景”。我的意思是,我只需绘制风格(点击,悬停等),但没有文字和图像。这些东西我想用自己画(用自定义格式等)。当我打电话给QToolButton::paintEvent(ev)
时,一切都被画上了。如何从绘画中排除图像和文字?我认为我应该使用drawControl()
,drawPrimitive()
和drawComplexControl()
,但不能理解所有这些状态
答案 0 :(得分:0)
void QToolButton::paintEvent(QPaintEvent *)
的源代码是:
QStylePainter p(this);
QStyleOptionToolButton opt;
initStyleOption(&opt);
p.drawComplexControl(QStyle::CC_ToolButton, opt);
QStylePainter::drawComplexControl
调用QStyle::drawComplexControl
,这是一个纯虚函数,其实现取决于您正在使用的样式。您需要的是转到具体命令的源代码(如QWindowsXPStyle
或QGtkStyle
),找到drawComplexControl()
实现并在paintEvent
中使用它。对于像QPushButton
这样的简单控件,您可以轻松地独立地重写其绘图风格。重绘QToolButton
将是一项更棘手的任务。
一个很好的选择是使用QCommonStyle
的源代码。