在主循环中运行代码

awp*_*eet 7 qt

我需要一种在主线程中运行我自己的更新功能的方法.每次主循环运行时,我都找不到能给我打勾的信号.

我做错了吗?如果我们想在循环中运行某些东西,强制用户代码在线程中运行是否是Qt?

Nik*_* C. 14

QTimer::singleShot(0, []{/* your code here */});
Run Code Online (Sandbox Code Playgroud)

这就是它,真的.使用0ms计时器意味着您的代码将在下一个事件循环迭代中运行.如果要确保在某个对象不再存在时代码将无法运行,请提供上下文对象:

QTimer::singleShot(0, contextObj, []{/* your code here */});
Run Code Online (Sandbox Code Playgroud)

这是有据可查的.

我在这里使用lambda作为例子.显然,如果代码很长,您可以提供插槽功能.

如果您希望在每个事件循环迭代中重复执行代码而不是仅执行一次,则使用不是单次模式的普通QTimer:

auto timer = new QTimer(parent);
connect(timer, &QTimer::timeout, contextObj, []{/* your code here */});
timer->start();
Run Code Online (Sandbox Code Playgroud)

(注意:如果不设置,则默认为0ms,因此QTimer::timeout()每次事件处理完成后都会发出.)

这是记录此行为的位置.

毫无疑问,如果执行的代码需要很长时间才能完成,那么GUI将在执行期间冻结.