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将在执行期间冻结.
| 归档时间: |
|
| 查看次数: |
5012 次 |
| 最近记录: |