【发布时间】:2009-05-10 03:23:38
【问题描述】:
我对使用 Qt 编程比较陌生,并且有一个问题。短版:
如何继承超类中定义的信号?
我正在尝试继承别人精心制作的 QTWidgets 以更改一些默认行为:
//Plot3D是一个QWidget,它定义了一个信号“rotationChanged” 类matLinePlot:公共QObject,公共Plot3D { Q_OBJECT; //ETC... 上市: //ETC... //捕捉 Plot3D 的信号“rotationChanged”并用它做一些魔术: 无效初始化图(){ QObject::connect(this, SIGNAL(rotationChanged( double , double , double )), 这,SLOT(myRotationChanged(双,双,双))); } };问题出在 QObject::connect 行。我想做的是将rotationChanged SIGNAL(来自qwt3D_plot.h)连接到本地函数/SLOT - “myRotationChanged”。但是,每当我这样做时,在运行时我都会得到:
Object::connect: 没有这样的信号 matLinePlot::rotationChanged(double, double, double)
在 C:...\matrixVisualization.h 中。当然,我知道rotationChanged 不在matrixVisualization.h 中——它在qwt_plot3D.h 中,但我认为既然我继承自Plot3D,一切都应该没问题。但是,现在我想起来了,因为 SIGNAL 和 SLOT 是宏,我假设 MOC 不知道/不关心继承。
这引出了我的问题 - 因为 MOC 和 SIGNALS / SLOTS 似乎不了解继承等:我如何子类化在其他地方定义的小部件并访问小部件的信号?
我有很多例子说明如何使用封装来完成这样的事情,但恐怕我不明白如何通过继承来做到这一点。
对不起,如果这是一个荒谬的问题 - 我觉得我错过了一些明显的东西。
【问题讨论】:
-
您在错误中看到的对“matrixVisualization.h”的引用显示了失败的 QObject::connect 在哪个文件中,而不是它试图“寻找”匹配信号的位置。
标签: qt inheritance subclass signals-slots