Qt退出事件循环
Qt Exiting Event Loop
我想监控Beaglebone附带的自定义设备中的紧急停止按钮,我的代码是用Qt 4.6开发的。
目前,当按下紧急停止按钮时,我成功地"显示"了一个消息框(没有任何按钮)。我想做的是在释放紧急停止按钮时继续执行程序ONLY。按钮按下/释放会在每个事件上发出单独的信号。但是,使用此代码永远不会检测到EmergencyStopIsInactive信号。
QEventLoop loop;
connect(this, SIGNAL(EmergencyStopIsInactive()), &loop, SLOT(quit()));
loop.exec(QEventLoop::AllEvents);
qDebug() << "Emergency Stop Deactivated";
事实上,使用断点,我可以看到它从未生成过。Eventloop似乎没有接收到信号。
如果我注释掉loop.exec行,使用断点,我可以看到代码发出信号。使用exec命令,我们永远不会到达断点。
exec()似乎不允许应用程序处理事件。
我能按我想要的方式工作吗?怎样
谨致问候,James
=======================================编辑:这是生成初始信号的代码:
// Set up Emergency Stop Input
EmStop = new mita_gpio;
EmStop->initgpio_read(49);
connect(EmStop,SIGNAL(StateOutput(unsigned int)), this, SLOT(update_EmStop(unsigned int) ) );
connect(EmStop,SIGNAL(StateOutput(unsigned int)), Test_Screen, SLOT(update_EmStop(unsigned int) ) );
connect(this,SIGNAL(EmergencyStopIsInactive()), Probe_Screen, SLOT(quit() ) );
connect(Probe_Screen,SIGNAL(ShowEmergencyStopScreen()),this,SLOT(EmergencyStopScreenShow()) );
该信号随后被链接到以下内容:
void Manager::update_EmStop(unsigned int state_value)
{
if (state_value == 1)
{
MitaData.EmergencyStop = 1;
emit EmergencyStopIsActive();
qDebug() << "Emergency Stop = 1";
}
else
{
MitaData.EmergencyStop = 0;
emit EmergencyStopIsInactive();
qDebug() << "Emergency Stop = 0";
}
}
SIGNAL(EmergencyStopIsInactive())
正在程序的主事件循环中执行(我从逻辑上假设)。
当您启动一个新的事件循环时,您使用阻塞函数exec来运行它,因此,尽管您的新循环正在运行,您还是阻塞了主事件循环。
loop.exec(QEventLoop::AllEvents);
由于您的信号应该是从主循环发送的,而主循环被您的阻塞函数loop.exec阻塞,因此在loop.exe返回之前,它永远不会发送。
为了解决这个问题,无论是从"loop"事件循环中生成EmergencyStopIsInactive()信号,还是将第二个循环放入单独的线程中。
相关文章:
- Xaudio2在更改缓冲区或循环时弹出声音
- C++程序在循环后给出奇怪的int值
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 具有Qt事件循环的可移植通用共享库设置
- 如何将事件循环中的事件分派给订阅者?
- 将"-01"替换为"-02" 英特尔编译器选项会导致 FPE 在较小的 for 循环行程计数中抛出
- 当输入在带有空格的单行中给出时,cin 如何在 while 循环中工作?
- 为什么我的 for 循环给出错误:X 没有命名类型
- 试图找出为什么我的代码保持无限循环
- 为什么我在使用 for 循环和 cout 命令时没有打印出矢量
- 向量循环抛出2个错误
- 阶乘使用循环递增给出垃圾值
- C++uWebSockets将事件循环集成到一个线程中
- 为什么当我'y'作为输入时会循环,但当我给出'n'时运行良好
- 如何找出为什么我的程序一直有一个无限循环?
- C++代码在 for 循环的条件下给出运行时错误,而如果它被具有相同意义的代码替换,则编译正确
- 了解如何在不冻结事件循环的情况下在 QThread 中休眠/等待
- NodeJS 文件系统 监视抛出事件两次或更多次
- 我的For循环出了什么问题?我得到警告:有符号和无符号整数表达式之间的比较[-Wsigncompare]
- SFML每个游戏循环重复事件循环3次