不能继承于QObject的类就一定不能使用信号槽?(用一个代理类进行发射就行了)

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不能继承于QObject的类就一定不能使用信号槽?(用一个代理类进行发射就行了)相关的知识,希望对你有一定的参考价值。

首先不能继承QObject的情况在开发中遇到得并不多,笔者在一年多的Qt项目开发中只遇到两三次。而且都是因为引进了第三方库导致编译过程中报错。

要想解决这个问题其实不难,因为笔者遇到的问题都是想定义一个信号,定义的槽情况没有遇到过,可以提出一个想法,有需要的朋友试一下。

要想实现信号发送,可以定义一个信号发射器类继承于QObject,然后在想要发送信息的类里定义一个信号发射器:

技术分享
图1
技术分享
图2

 

只要在想触发信号的地方调用信号发射器的sendMsg()函数就可以让信号发射器将信号发出。

要想实现槽的话,可以同处理信号的方式解决,建立一个信号处理器,将要处理的内容传入其中即可。

另外还想啰嗦几句,虽然这个方法是笔者为了解决某些类不能继承于QObject想到的,但是不只限于解决这一种情形。

在一次项目中,遇到一个问题:很多个(自动添加的)控件,点击某个控件就将其自带的信息显示在一个文本框中,我解决的方案就是将一个信号处理器使用单例模式编写,在控件的基类中的clicked()响应的槽函数中去调用sendMsg()实现的。

 

http://www.jianshu.com/p/b0dc50cb0119

以上是关于不能继承于QObject的类就一定不能使用信号槽?(用一个代理类进行发射就行了)的主要内容,如果未能解决你的问题,请参考以下文章

使用信号槽

Qt QGraphicsItem使用信号槽注意事项

Qt QGraphicsItem使用信号槽注意事项

Qt for python 的信号槽机制使用

QT学习_常用类及信号和槽

QT 中 关键字讲解(emit,signal,slot)