我如何停止和开始一个循环在QT
How do I stop and start a loop in QT?
我一直在努力弄清楚如何使程序停止在for循环中,等待一个按钮被点击,for循环继续。
难道没有像QSystem.stop()
这样简单的停止循环的方法,在按钮点击功能QSystem.star()
,循环继续。
在c++中,你可以使用system("pause")
或者当你使用cin<<
时程序停止。但是我如何在QT中做到这一点?
因为用户界面需要它的代码才能运行,如果您停止事件循环(这也意味着从事件循环中调用的任何函数都被阻塞,等待某个事件),您也会停止用户界面,这意味着进入窗口的点击将不会被处理。这就是为什么在基于事件的编程中(所有 UI工具包都是这样做的),必须尽快返回到主事件处理程序循环。
你能做的是创建第二个线程并等待一个条件变量。GUI线程可以通知按钮单击事件槽中的条件变量。
在c++中你可以使用system("pause")或者程序停止
Exactly:程序已停止。这意味着它不会从操作系统获取事件。然而,从stdin接收数据并不是一个事件。它阻塞流I/O。图形用户界面是基于事件的。
注意,从概念上讲,想一个用户界面来提供流I/O通道并不是不可能的。然而,这在单线程程序中不起作用。您需要并行执行(协同程序、线程等)才能使这样的概念发挥作用。
你不需要线程,嵌套的事件循环将完成这项工作。
int waitUntilSignalIsEmitted(QObject *sender, const char *signal) {
QEventLoop loop;
connect(sender, signal,
&loop, SLOT(quit()));
return loop.exec();
}
// usage:
while(yourLoopCondition) {
// some stuff
...
// pause here
waitUntilSignalIsEmitted(yourContinuationButton, SIGNAL(clicked()));
// loop continuation
...
}
相关文章:
- 使用一个循环与两个循环
- 如何通过一个循环将多个文件的内容分配给不同的类属性?
- 我对C++很陌生,我被困在试图做一个循环
- 该程序没有产生输出,而是卡在一个循环中,几秒钟后消失并打印被杀死?
- 有没有办法把它变成一个循环,让它更具包容性?
- 是否可以在一个循环中写入多个二进制文件
- C++在最后一个循环中排除了部分循环运算符
- 是否可以为一个循环设置多个条件
- 创建一个循环,该循环将输出大于零且小于 60(不包括 60)的所有 5 的倍数
- 如何创建一个循环,该循环检查每次迭代并在每次迭代后从头开始
- 如何在一个循环中分离两个不同的数组?
- 为什么这个do-while循环每隔一个循环只写入数组?
- 我在 c ++ 中有一个循环错误
- C :使用文件末端(CTRL Z)结束一个循环似乎打破了我程序的其余部分
- 如何将枯竭的健康转移到下一个循环中
- 一个循环,可以打印所有项目(无论链条多长时间) *指针
- 在 GtkDialog 中创建一个循环
- 我可以做一个循环,直到“std::cin”在输入缓冲区中看到“”字符
- 一个线程设置成员,而另一个循环上方 - 是此螺纹 - 不安全
- 编写一个循环,以检查变量的值与大量可能的有效值(C )的值