gpt4 book ai didi

qt - 在主循环中运行代码

转载 作者:行者123 更新时间:2023-12-04 09:39:30 33 4
gpt4 key购买 nike

我需要一种在主线程中运行我自己的更新函数的方法。我找不到每次主循环运行时都会打勾的信号。

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

最佳答案

QTimer::singleShot(0, []{/* your code here */});

就是这样,真的。使用 0ms 计时器意味着您的代码将在下一个事件循环迭代中运行。如果要确保在某个对象不再存在时代码不会运行,请提供一个上下文对象:
QTimer::singleShot(0, contextObj, []{/* your code here */});

这是 well documented .

我在这里仅使用 lambda 作为示例。显然,如果代码很长,您可以提供一个槽函数。

如果您希望您的代码在每个事件循环迭代中重复执行而不是一次,那么请使用非单发模式的普通 QTimer:
auto timer = new QTimer(parent);
connect(timer, &QTimer::timeout, contextObj, []{/* your code here */});
timer->start();

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

这是这种行为的地方 documented .

不用说,如果执行的代码需要很长时间才能完成,那么您的 GUI 将在执行过程中卡住。

关于qt - 在主循环中运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36988826/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com