QT - 覆盖QToolButton绘制事件

时间:2013-03-26 19:05:29

标签: qt

我有自己的小部件MyToolButton,它继承自QToolButton。在paintEvent中,我想从原始QToolButton中仅绘制“背景”。我的意思是,我只需绘制风格(点击,悬停等),但没有文字和图像。这些东西我想用自己画(用自定义格式等)。当我打电话给QToolButton::paintEvent(ev)时,一切都被画上了。如何从绘画中排除图像和文字?我认为我应该使用drawControl()drawPrimitive()drawComplexControl(),但不能理解所有这些状态

1 个答案:

答案 0 :(得分:0)

void QToolButton::paintEvent(QPaintEvent *)的源代码是:

QStylePainter p(this);
QStyleOptionToolButton opt;
initStyleOption(&opt);
p.drawComplexControl(QStyle::CC_ToolButton, opt);

QStylePainter::drawComplexControl调用QStyle::drawComplexControl,这是一个纯虚函数,其实现取决于您正在使用的样式。您需要的是转到具体命令的源代码(如QWindowsXPStyleQGtkStyle),找到drawComplexControl()实现并在paintEvent中使用它。对于像QPushButton这样的简单控件,您可以轻松地独立地重写其绘图风格。重绘QToolButton将是一项更棘手的任务。 一个很好的选择是使用QCommonStyle的源代码。