关于QT的emit机制

gongzf111 2017-01-06 03:01:02
现在有两个函数A,B,B函数里使用emit发射一个信号,我在A函数接收,然后在A函数做相应的操作

这个可以实现么??
可以的话,那在A函数中由什么来接收信号触发槽函数呢???
求解!
...全文
1702 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
slowlytalk 2017-01-13
  • 打赏
  • 举报
回复
前段时间碰到一个和你问题一样的。。就是发送信号的obj,和你connect的obj不一样。。这种现象怎么好像很常见的样子。。
gongzf111 2017-01-10
  • 打赏
  • 举报
回复
引用 14 楼 caoshangpa 的回复:
[quote=引用 13 楼 u013914992 的回复:] [quote=引用 11 楼 caoshangpa 的回复:] connect(usesetting,SIGNAL(set_min(QString)),this,SLOT(send_data(QString)),Qt::DirectConnection);
Qt::DirectConnection这个参数的意思是不是检测到信号立马执行相对应的槽函数 一般多用于线程里?! [/quote] 意思Qt帮助里有说,我之前遇到过槽不执行的情况,和你的类似,可以加这个参数试一下[/quote] 嗯嗯 已经解决了! 我的问题是信号发出来主函数没接收到,导致无法执行槽函数。细节问题我以后还得多注意!!
gongzf111 2017-01-10
  • 打赏
  • 举报
回复
引用 12 楼 u010111033 的回复:
[quote=引用 10 楼 u013914992 的回复:] [quote=引用 9 楼 u010111033 的回复:] [quote=引用 8 楼 u013914992 的回复:] [quote=引用 7 楼 u010111033 的回复:] 同一个类里面emit信号与槽函数,在connect里面需要两个this
不行,这个我记得上周五就试过了。。 很奇怪,一模一样的程序,我在测试程序里的就可以实现,加在我的项目程序就不可以[/quote] 说句话,你别生气!你一定在瞎搞!!![/quote] 。。。。[/quote] 你按照灿哥哥的方式来下试试:Qt::DirectConnection,直接运行信号与槽的方式。平时不写这个都是自动判断的方式:队列方式或者直接方式[/quote] 起初按照那种方法试,还是不行。然后我又重新分析了代码,终于找到原因了。 原因是我程序代码太多太杂,之前写的后来都不记得了。。。子函数的类在构造函数实例了一个,在一个点击按钮弹出子对话框的槽函数又实例了一个,两次的不一样,当点击打开子函数对话框的类和connect的第一个对象不一样,所以信号和槽函数怎么都连接不到一起!! 还是欠缺实践经验
草上爬 2017-01-10
  • 打赏
  • 举报
回复
引用 13 楼 u013914992 的回复:
[quote=引用 11 楼 caoshangpa 的回复:] connect(usesetting,SIGNAL(set_min(QString)),this,SLOT(send_data(QString)),Qt::DirectConnection);
Qt::DirectConnection这个参数的意思是不是检测到信号立马执行相对应的槽函数 一般多用于线程里?! [/quote] 意思Qt帮助里有说,我之前遇到过槽不执行的情况,和你的类似,可以加这个参数试一下
gongzf111 2017-01-10
  • 打赏
  • 举报
回复
引用 11 楼 caoshangpa 的回复:
connect(usesetting,SIGNAL(set_min(QString)),this,SLOT(send_data(QString)),Qt::DirectConnection);
Qt::DirectConnection这个参数的意思是不是检测到信号立马执行相对应的槽函数 一般多用于线程里?!
Little柯南 2017-01-10
  • 打赏
  • 举报
回复
引用 10 楼 u013914992 的回复:
[quote=引用 9 楼 u010111033 的回复:] [quote=引用 8 楼 u013914992 的回复:] [quote=引用 7 楼 u010111033 的回复:] 同一个类里面emit信号与槽函数,在connect里面需要两个this
不行,这个我记得上周五就试过了。。 很奇怪,一模一样的程序,我在测试程序里的就可以实现,加在我的项目程序就不可以[/quote] 说句话,你别生气!你一定在瞎搞!!![/quote] 。。。。[/quote] 你按照灿哥哥的方式来下试试:Qt::DirectConnection,直接运行信号与槽的方式。平时不写这个都是自动判断的方式:队列方式或者直接方式
草上爬 2017-01-09
  • 打赏
  • 举报
回复
connect(usesetting,SIGNAL(set_min(QString)),this,SLOT(send_data(QString)),Qt::DirectConnection);
gongzf111 2017-01-09
  • 打赏
  • 举报
回复
引用 9 楼 u010111033 的回复:
[quote=引用 8 楼 u013914992 的回复:] [quote=引用 7 楼 u010111033 的回复:] 同一个类里面emit信号与槽函数,在connect里面需要两个this
不行,这个我记得上周五就试过了。。 很奇怪,一模一样的程序,我在测试程序里的就可以实现,加在我的项目程序就不可以[/quote] 说句话,你别生气!你一定在瞎搞!!![/quote] 。。。。
Little柯南 2017-01-09
  • 打赏
  • 举报
回复
引用 8 楼 u013914992 的回复:
[quote=引用 7 楼 u010111033 的回复:] 同一个类里面emit信号与槽函数,在connect里面需要两个this
不行,这个我记得上周五就试过了。。 很奇怪,一模一样的程序,我在测试程序里的就可以实现,加在我的项目程序就不可以[/quote] 说句话,你别生气!你一定在瞎搞!!!
gongzf111 2017-01-09
  • 打赏
  • 举报
回复
引用 7 楼 u010111033 的回复:
同一个类里面emit信号与槽函数,在connect里面需要两个this
不行,这个我记得上周五就试过了。。 很奇怪,一模一样的程序,我在测试程序里的就可以实现,加在我的项目程序就不可以
Little柯南 2017-01-09
  • 打赏
  • 举报
回复
同一个类里面emit信号与槽函数,在connect里面需要两个this
Little柯南 2017-01-09
  • 打赏
  • 举报
回复
引用 4 楼 u013914992 的回复:
[quote=引用 2 楼 u010111033 的回复:] 完全可以实现,无论同一个类还是跨类跨线程都可以实现,首先A要emit信号,B要写在Slots函数类型里(Qt5新表达方式例外),还要做对等的参数处理,emit的参数与slot的参数类型与数量相等或者emit的比slot的多一些,但同等位置的要类型相同,最后还要坐connect的关联,这样才行
我就是这样弄得,但是在主函数接收不到在另一个函数发出的信号。。。。 主函数.h private slots: void send_data(QString My_data); 主函数.cpp usesetting = new UseSettings;//另一个函数的类 connect(usesetting,SIGNAL(set_min(QString)),this,SLOT(send_data(QString))); void DustMeter::send_data(QString My_data) { qDebug() << " 666666666666666666666" << My_data ; } 子函数.h private slots: void on_pushButton_2_clicked(); signals: void set_min(QString ); 子函数.cpp void UseSettings::on_pushButton_2_clicked() { emit set_min(QString(tr("hahaha!"))); qDebug () << "Success !"; } 该定义的定义了,该声明的也声明了,就是在主函数接收不到信号,无法执行相应的槽函数。这是什么原因??[/quote] 你把这个:connect(usesetting,SIGNAL(set_min(QString)),this,SLOT(send_data(QString))); 换成connect(this,SIGNAL(set_min(QString)),this,SLOT(send_data(QString)));试试
gongzf111 2017-01-09
  • 打赏
  • 举报
回复
引用 3 楼 tax10240809163com 的回复:
在同一个类里面的话,调用一下就可以实现了,不同的类,用信号和槽,Qt4必须保持信号和槽的参数对应一致,Qt5没试过,不知道,根据上面仁兄应该是可以的,具体可以试一下
就是那样搞得 。。 我单独写了一测试的就可以,在我的项目工程里就实现不了,实在想不出是哪里出问题了
gongzf111 2017-01-09
  • 打赏
  • 举报
回复
引用 2 楼 u010111033 的回复:
完全可以实现,无论同一个类还是跨类跨线程都可以实现,首先A要emit信号,B要写在Slots函数类型里(Qt5新表达方式例外),还要做对等的参数处理,emit的参数与slot的参数类型与数量相等或者emit的比slot的多一些,但同等位置的要类型相同,最后还要坐connect的关联,这样才行
我就是这样弄得,但是在主函数接收不到在另一个函数发出的信号。。。。 主函数.h private slots: void send_data(QString My_data); 主函数.cpp usesetting = new UseSettings;//另一个函数的类 connect(usesetting,SIGNAL(set_min(QString)),this,SLOT(send_data(QString))); void DustMeter::send_data(QString My_data) { qDebug() << " 666666666666666666666" << My_data ; } 子函数.h private slots: void on_pushButton_2_clicked(); signals: void set_min(QString ); 子函数.cpp void UseSettings::on_pushButton_2_clicked() { emit set_min(QString(tr("hahaha!"))); qDebug () << "Success !"; } 该定义的定义了,该声明的也声明了,就是在主函数接收不到信号,无法执行相应的槽函数。这是什么原因??
slowlytalk 2017-01-06
  • 打赏
  • 举报
回复
在同一个类里面的话,调用一下就可以实现了,不同的类,用信号和槽,Qt4必须保持信号和槽的参数对应一致,Qt5没试过,不知道,根据上面仁兄应该是可以的,具体可以试一下
Little柯南 2017-01-06
  • 打赏
  • 举报
回复
完全可以实现,无论同一个类还是跨类跨线程都可以实现,首先A要emit信号,B要写在Slots函数类型里(Qt5新表达方式例外),还要做对等的参数处理,emit的参数与slot的参数类型与数量相等或者emit的比slot的多一些,但同等位置的要类型相同,最后还要坐connect的关联,这样才行
gongzf111 2017-01-06
  • 打赏
  • 举报
回复
难道都没有人知道么

16,817

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧