Pet*_*ete 12 inheritance qt subclass signals-slots
我对使用Qt进行编程相对较新,并且有一个问题.精简版:
如何继承超类中定义的信号?
我试图将其他人精心制作的QTWidgets子类化,以改变一些默认行为:
//Plot3D is a QWidget that defines a signal "rotationChanged"
class matLinePlot : public QObject, public Plot3D {
Q_OBJECT;
//etc...
public:
//etc...
//Catch Plot3D's signal "rotationChanged" and do some magic with it:
void initPlot(){
QObject::connect(this, SIGNAL(rotationChanged( double , double , double )),
this, SLOT(myRotationChanged(double, double, double)));
}
};
问题出在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和信号/插槽似乎并不了解继承等:我怎么能继承定义窗口小部件在其他地方并访问widget的信号?
我有很多关于如何使用封装来完成这样的事情的例子,但是我害怕我不明白如何用继承来做这件事.
对不起,如果这是一个荒谬的问题 - 我觉得我错过了一些明显的东西.
ash*_*tch 10
我想问题是多重继承:
class matLinePlot : public QObject, public Plot3D
...
Run Code Online (Sandbox Code Playgroud)
我假设那Plot3D是一个子类QObject?在这种情况下,你应该这样做
class matLinePlot : public Plot3D
...
Run Code Online (Sandbox Code Playgroud)
代替.