我一直试图弄清楚如何让程序在 for 循环中停止并等待单击按钮并继续 for 循环。

没有任何简单的方法可以像 QSystem.stop() 那样停止循环,并且在单击按钮的函数 QSystem.star() 中循环继续。

在 C++ 中,您可以使用 system("pause") 或程序在使用 cin<< 时停止。但是我如何在 QT 中做到这一点?

最佳答案

由于用户界面需要其代码运行,如果您停止事件循环(这也意味着从事件循环内调用的任何函数都被阻塞,等待某个事件),您也会停止用户界面,这意味着点击进入窗口不会被处理。这就是为什么在基于事件的编程中,这是所有 UI 工具包所做的,必须尽快返回主事件处理程序循环。

您可以做的是创建第二个线程并等待条件变量。 GUI 线程可以在按钮单击事件槽中用信号通知该条件变量。



正是:程序已停止。这意味着它不会从操作系统获取事件。但是,从标准输入接收数据不是事件。它阻塞了流式 I/O。虽然图形用户界面是基于事件的。

请注意,从概念上讲,考虑提供流 I/O channel 的用户界面并非不可能。但是,这在单线程程序中不起作用。您需要并行执行(协程、线程等)才能使这样的概念发挥作用。

关于c++ - 如何在 QT 中停止和启动循环?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24549894/

10-11 22:44
查看更多