2013-03-26 144 views
0

我有自己的部件MyToolButton,它从QToolButton继承。在paintEvent中,我只想从原始的QToolButton中抽取“背景”。我的意思是,我只需要绘制样式(点击,悬停等),但没有文字和图像。这些东西我想通过我自己绘制(使用自定义格式等)。当我打电话给QToolButton::paintEvent(ev)时,一切都被涂上了。如何从绘画中排除图像和文字?我supose,我应该使用drawControl()drawPrimitive()drawComplexControl()但不能明白所有这些状态void QToolButton::paintEvent(QPaintEvent *)QT - 覆盖QToolButton绘制事件

回答

0

的源代码是:

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

QStylePainter::drawComplexControl电话QStyle::drawComplexControl,这是一个纯虚函数,它的实现取决于你使用的风格。你需要的是去具体的障碍的源代码(如QWindowsXPStyleQGtkStyle),找到drawComplexControl()的实施,并将其用于paintEvent。对于像QPushButton这样的简单控件,您可以非常方便地独立重写其绘图。重绘QToolButton将是一个更棘手的任务。 一个不错的选择是使用QCommonStyle的源代码。

+0

你是如何找到源代码的?我是QT的新手,当我通过CTRL +单击进入标题声明时,F4不加载.cpp – Dibo 2013-03-26 20:21:55

+0

它取决于您使用的操作系统和Qt安装的类型。在Windows上使用Qt库时,可以在%QT_HOME%/ src中找到源代码。当使用基于deb的linux及其存储库时,可以使用命令“apt-get source qt4-x11”下载源代码。最后,在任何系统中,您都可以从此处下载:http://releases.qt-project.org/qt4/source/qt-everywhere-opensource-src-4.8.4.tar.gz – Amartel 2013-03-27 04:05:25

+0

修复:不是%QT_HOME %/ src - 但是%QTDIR%/ src – Amartel 2013-03-27 04:32:45