l=new GuiLoading((new QMovie(":/Icon/loading2.jfif")),this);//用于加载的widget
l -> show();
_scene -> createChip(fileMap);//qgraphicscence,一个耗时函数,用于再Scence中生成item
l -> close();
想要实现的效果是这样的:在_scene -> createChip(fileMap)的时候插入一个加载的动画,使得等待的时候不会这么枯燥,但是我发现这个动画根本显示不了。
后来了解到,是因为调用_scene -> createChip(fileMap);使得GuiLoading的界面得不到响应,要用QCoreApplication::processEvents(),来处理未响应事件。可是QCoreApplication::processEvents()要一直调用才会一直响应未处理事件,而createChip中不是一个循环,可以一直调用QCoreApplication::processEvents(),而是多个循环。然后我在每个循环中都调用了QCoreApplication::processEvents(),GuiLoading确实得到了响应,但是createChip却无法执行结束,而且代码变得很繁琐。
动画和_scene -> createChip在同一个线程中,很可能是_scene -> createChip的执行把系统资源占用了,导致动画没法播放。
1.尝试把1行中最后的this改成0,看看有没有效果;如果没有效果,尝试把动画做成一个子进程
然后我在想,能不能用多线程方法来解决,于是用了Qthread,结果还是一样的,线程根本开不起来,就算开起来也和原来一样。然后我干脆不用Qthread,用标准库的Thread,结果还是一样的,开不起来
然后我了解到在QT中,所有界面组件相关的操作都必须在主线程中(也就是GUI thread),所以线程无法解决,所以兄弟们,你们有没有好方法?