gpt4 book ai didi

c++ - Qt 4.8 - 更新 QGraphicsScene 时显示 “loading” 动画

转载 作者:太空宇宙 更新时间:2023-11-04 12:00:21 25 4
gpt4 key购买 nike

我正在使用 Qt 4.8。

我有一个很大的 QGraphicsScene 需要更新(附加新的 QGraphicsObjects 需要 3 秒)。我想向用户表明更新正在进行中。特别是我想在屏幕上显示加载轮,而不是在更新结束时将其删除。

这里的问题是我应该让轮子可见然后在场景更新的同一线程。这是因为:

  • 不允许在 gui 线程外编辑图形属性。

  • 我不能在“工作线程”中移动计算,因为它涉及图形。

这导致轮子根本不显示,因为当 View 更新时轮子已经设置为可见,然后再次不可见:

showWheel();
/*... big computation involving graphics ...*/
hideWheel();
/*... here GUI is updated, thus the wheel doesn't show up...*/

有什么我可以做的吗?

谢谢

最佳答案

大概您有一些事件触发了计算。不要使用它来触发计算,而是使用它来触发 scheduleComputation() 槽。 scheduleComputation槽可以调用showWheel()然后调度doComputation()槽到下一个事件队列的末尾,之后它将返回。这将允许事件循环运行并显示您的车轮,然后执行计算。当计算结束时,您可以调用 hideWheel() 并返回事件循环。

像这样:

void scheduleComputation()
{
computeScheduler = new QTimer(this);
computeScheduler->setInterval(0);
connect(computeScheduler,SIGNAL(timeout()),this,SLOT(doComputation()));
showWheel();
}

void doComputation()
{
//...Computation Here...
hideWheel();
}

避免长时间阻塞 UI 线程也是一个好主意。这可以通过将长时间运行的代码拆分为可由计时器触发的较小部分来完成。

关于c++ - Qt 4.8 - 更新 QGraphicsScene 时显示 “loading” 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14384125/

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