0

我有自己的小部件 MyToolButton,它继承自QToolButton. 在 paintEvent 中,我只想从 original 中绘制“背景” QToolButton。我的意思是,我只需要绘制样式(单击、悬停等),但没有文本和图像。我想自己绘制这些东西(使用自定义格式等)。当我打电话时QToolButton::paintEvent(ev),一切都画好了。如何从绘画中排除图像和文字?我想我应该使用drawControl()drawPrimitive()drawComplexControl()无法理解所有这些状态

4

1 回答 1

2

源代码void QToolButton::paintEvent(QPaintEvent *)为:

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

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

于 2013-03-26T19:55:56.447 回答