• 6012阅读
  • 4回复

[提问]不能使用父类的信号? [复制链接]

上一主题 下一主题
离线neicole
 
只看楼主 倒序阅读 楼主  发表于: 2012-03-02

话说,后来,在群上稍问了一下: 不能使用父类的信号作为发射源????得到的答案是,能用~Q tCore很多的继承类的都用到了,群上的同志们是这样说的,然后,开始怀疑是不是自己写的代码有问题,将自己的详细过程写出:

自己定义了这么几个类:
// first.
[size=font-size:9.5pt,9.5pt]class[size=font-size:9.5pt,9.5pt] mainWindow : publicQMainWindow
[size=font-size:9.5pt,9.5pt]{
[size=font-size:9.5pt,9.5pt]    Q_OBJECT
[size=font-size:9.5pt,9.5pt]public:
[size=font-size:9.5pt,9.5pt]    mdiWindow * mdi;
[size=font-size:9.5pt,9.5pt]...

};  
// second
[size=font-size:9.5pt,9.5pt]class[size=font-size:9.5pt,9.5pt] mdiWindow: publicQMdiArea
[size=font-size:9.5pt,9.5pt]{
[size=font-size:9.5pt,9.5pt]    Q_OBJECT
[size=font-size:9.5pt,9.5pt]public:
[size=font-size:9.5pt,9.5pt]    fileNew(); // [size=font-size:9.5pt,9.5pt][size=font-size:9.5pt,9.5pt]fileNew()[size=font-size:9.5pt,9.5pt]中有创建[size=font-size:9.5pt,9.5pt]singleText[size=font-size:9.5pt,9.5pt]的对象,放在内存的堆中。
[size=font-size:9.5pt,9.5pt]...

};
// third
[size=font-size:9.5pt,9.5pt]class[size=font-size:9.5pt,9.5pt] singleText: publicQTextEdit
[size=font-size:9.5pt,9.5pt]{
[size=font-size:9.5pt,9.5pt]    Q_OBJECT
[size=font-size:9.5pt,9.5pt]publicslot:
[size=font-size:9.5pt,9.5pt]    test(); // [size=font-size:9.5pt,9.5pt]弹出一个[size=font-size:9.5pt,9.5pt]QMessageBox[size=font-size:9.5pt,9.5pt]对话框,用于测试函数。
[size=font-size:9.5pt,9.5pt]...
[size=font-size:9.5pt,9.5pt]

};

因为在QTextEdit中有信号void QMdiArea::subWindowActivated ( QMdiSubWindow * window )[signal]
由于功能需要,想在[size=font-size:9.5pt,9.5pt]mainWindow[size=font-size:9.5pt,9.5pt]中使用到这个函数,于是就尝试[size=font-size:9.5pt,9.5pt]connect[size=font-size:9.5pt,9.5pt]这个信号,但了,为了排除其它因素的影响,就直接在第三个类中做测试了。

在第三个类的构造函数中添加下面的语句:
connect(this, SIGNAL(subWindowActiveated(QMdiSubWindow* window)), this, SLOT(book()));
结果,在进行窗口切换时,这个slot没有响应,不知道是不是自己的connect方法出错,在这里请教大家如何能在子类中使用父类的信号?能这样使用的吗?

个人主页:http://blog.csdn.net/neicole
个性签名: :)不想去知道是为什么,我只知道,我想向前走,一直向前走...... 或许,终有一天,答案会出现在眼前...
离线neicole
只看该作者 1楼 发表于: 2012-03-03
忽然发觉,打错了,是在第一个类才是测试的语句:
connect(mdi, SIGNAL(subWindowActivated(QMdSubWindow * window)), qobject_cast<singleText *>(this -> QMdiArea::activeSubWindow () -> QMdiSubWindow::widget()) , SLOT( singleText::fileSaveSingle()));
个人主页:http://blog.csdn.net/neicole
个性签名: :)不想去知道是为什么,我只知道,我想向前走,一直向前走...... 或许,终有一天,答案会出现在眼前...
离线neicole
只看该作者 2楼 发表于: 2012-03-03
晕啊~这样才是。。。这次没打错了~

connect(mdi, SIGNAL(subWindowActivated(QMdSubWindow * window)), qobject_cast<singleText *>(mdi -> QMdiArea::activeSubWindow () -> QMdiSubWindow::widget()) , SLOT( singleText::fileSaveSingle()));

这样算不算已经实例化了呢?意思是要在内存栈中定义了才算?所以这样就不行了?
个人主页:http://blog.csdn.net/neicole
个性签名: :)不想去知道是为什么,我只知道,我想向前走,一直向前走...... 或许,终有一天,答案会出现在眼前...
离线neicole
只看该作者 3楼 发表于: 2012-03-03
在第二个类中再定义一个book的slot
然后,
connect(this, SIGNAL(subWindowActivated(QMdSubWindow *)), this, SLOT(book(QMdSubWindow *)));
还是不行。
个人主页:http://blog.csdn.net/neicole
个性签名: :)不想去知道是为什么,我只知道,我想向前走,一直向前走...... 或许,终有一天,答案会出现在眼前...
离线neicole
只看该作者 4楼 发表于: 2012-03-03
终于,终于,这个信号槽的问题解决了,在网上遇到一位热心人士,与他QQ交流,然后,后来,竟然只是。。。漏了一个i
connect(this, SIGNAL(subWindowActivated(QMdiSubWindow *)), this, SLOT(book(QMdiSubWindow *)));
在这个交流与上Q群的过程,同时也知道了,原来:
SIGNAL不可带形参,子类可以使用父类的SIGNAL。
用bool = connect(...)可以检测connect的状态。
另外,也实现了这个connect后
才知道,原来subWindowActivated的功能并不如想像中那么符合自己的功能要求,这个subWindowActived当有激活窗口的时候就会不断执行,也就是说,它会陷入一个死循环。
个人主页:http://blog.csdn.net/neicole
个性签名: :)不想去知道是为什么,我只知道,我想向前走,一直向前走...... 或许,终有一天,答案会出现在眼前...
快速回复
限100 字节
 
上一个 下一个