我有自己的小工具从QToolButton继承的MyToolButton。在paintEvent中,我只想从原始的QToolButton中绘制“背景”。我的意思是,我只需要绘制风格(点击,悬停等),但没有文本和图像。这些东西我想自己画(与自定义格式等)。当我调用QToolButton::paintEvent(ev)时,一切都会被绘制。如何从绘画中排除图像和文本?我假设我应该使用drawControl()、drawPrimitive()和drawComplexControl(),但是我不能理解所有这些状态
发布于 2013-03-27 03:55:56
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的源代码。
https://stackoverflow.com/questions/15645344
复制相似问题