当前位置: 代码迷 >> QT开发 >> 对话框使用exec()后信号槽的有关问题
  详细解决方案

对话框使用exec()后信号槽的有关问题

热度:120   发布时间:2016-04-25 04:50:12.0
对话框使用exec()后信号槽的问题
我在主窗口使用exec()来调用对话框, 
在对话框里点击按钮发出一个信号,
然后在主窗口中connect 这个信号,
可是槽函数不起作用。
这个问题困扰了我半天。
后来我无意中将exec() 改为show() ,
居然可以了!!!
不知道是什么原因??

------解决方案--------------------
exec()本身是个事件循环,他会代替主事件循环处理事件
但是对话框的exec()被设置成为强制忽略一些事件(通常的模态对话框跳出来之后你就不能操作其他界面就是这个原因)
所以你的信号-槽连接事件应该被忽略了

——以上是个人猜测
------解决方案--------------------
你可以用这样的方式解决:
if (myDialog.exec() == QDialog::accepted )
{
//你的代码
}
运行时程序会一直停留在if(myDialog.exec() == QDialog::accepted ),等到你按下了ok之后才会执行花括号里的代码(如果按了cancel就不会执行)
------解决方案--------------------
exec()堵塞了主消息循环,构建了自己的消息循环
  相关解决方案