• 3565阅读
  • 8回复

关于信号关联不上槽函数的问题。 [复制链接]

上一主题 下一主题
离线蚂蚁power
 

只看楼主 倒序阅读 楼主  发表于: 2015-11-09
有三个类A,B,C;
类A继承QThread,然后调用类B中的一个静态方法,该静态方法调用类C中的一个成员方法,在该成员方法发信号给类A,发现类A中的槽函数接收不到信号,请问为什么?
类A中#include b.h,#include c.h
然后在run方法中绑定信号槽:connect(类C的对象,SIGNAL(readFileContent(QString &,int)),this,SLOT(setModelslot(QString &,int)));
类C中 emit readFileContent(“”,0);
类A和类C中都有Q_OBJECT,类B中没有

离线z609932088

只看该作者 1楼 发表于: 2015-11-10
知道到,帮你顶,我现在还是Qt初级,没有遇到过这种问题
有阳光的地方就是青春
离线蚂蚁power

只看该作者 2楼 发表于: 2015-11-10
OK 谢谢!共同努力!
离线蚂蚁power

只看该作者 3楼 发表于: 2015-11-15
实现办法需要看一下Qt的线程和事件。我改变了这种方法,使用了文本来保存数据,然后在次线程中在读取文本数据。
离线XChinux

只看该作者 4楼 发表于: 2015-11-16
跨线程的信号槽处理的话,走的是消息队列,那就需要你的类A在trun()中执行exec(),这样才能处理你的信号槽调用。你看看类A的run()中是不是没有调用exec()?
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线蚂蚁power

只看该作者 5楼 发表于: 2015-11-17
回 XChinux 的帖子
XChinux:跨线程的信号槽处理的话,走的是消息队列,那就需要你的类A在trun()中执行exec(),这样才能处理你的信号槽调用。你看看类A的run()中是不是没有调用exec()? (2015-11-16 21:52) 

确实没有调用
离线ustcgdd

只看该作者 6楼 发表于: 2015-12-16
可不可以这样尝试一下,先给B发信号,等B接收到信号之后,再把信号发给A,前段时间看到有关于信号是可以连续发送的,我自己没有尝试,不知道方法可行。
离线蚂蚁power

只看该作者 7楼 发表于: 2015-12-17
回 ustcgdd 的帖子
ustcgdd:可不可以这样尝试一下,先给B发信号,等B接收到信号之后,再把信号发给A,前段时间看到有关于信号是可以连续发送的,我自己没有尝试,不知道方法可行。 (2015-12-16 16:58) 

这样确实可以,当初不明白的是为啥,C发信号A接收不到。然后上面的总教头说了是没有exec()。
离线jxgyzhang

只看该作者 8楼 发表于: 2015-12-17
readFileContent(QString &,int)  改成 readFileContent(const QString &,int)  试试,看看应用程序输出里有没有提示信号参数没注册的提示
快速回复
限100 字节
 
上一个 下一个