Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QT-覆盖QToolButton绘制事件_Qt - Fatal编程技术网

QT-覆盖QToolButton绘制事件

QT-覆盖QToolButton绘制事件,qt,Qt,我有自己的小部件MyToolButton,它继承自QToolButton。在paintEvent中,我只想从原始QToolButton中绘制“背景”。我的意思是,我只需要绘制样式(单击、悬停等),但不需要文本和图像。这些东西我想自己画(自定义格式等)。当我调用QToolButton::paintEvent(ev)时,所有的东西都被绘制了。如何从绘画中排除图像和文字?我希望我应该使用drawControl(),drawPrimitive()和drawComplexControl(),但无法理解vo

我有自己的小部件MyToolButton,它继承自
QToolButton
。在paintEvent中,我只想从原始
QToolButton
中绘制“背景”。我的意思是,我只需要绘制样式(单击、悬停等),但不需要文本和图像。这些东西我想自己画(自定义格式等)。当我调用
QToolButton::paintEvent(ev)
时,所有的东西都被绘制了。如何从绘画中排除图像和文字?我希望我应该使用
drawControl()
drawPrimitive()
drawComplexControl()
,但无法理解
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

的源代码,您是如何找到源代码的?我是QT的新手,当我通过CTRL+click进入标题声明时,F4不会加载。这取决于您使用的操作系统和QT安装的类型。在Windows中使用Qt库时,可以在%Qt\u HOME%/src中找到源代码。使用基于deb的linux及其存储库时,可以使用命令“apt get source qt4-x11”下载源代码。最后,在任何系统中,您都可以从这里下载它:修复:不是%QT\u HOME%/src-而是%QTDIR%/src谢谢。我安装了debian,所以我必须下载它。然后我会检查它是如何被提取的