我已经为我的问题搜索了一些解决方案而没有...我在一个QLabel中使用带有GIF动画的QMovie来获取加载状态,好吗?它很简单,我在这个链接中学到了:GIF animation in Qt,当我打开菜单时,这非常有效,比拥有一个标签,我将QMovie放在该菜单的QLabel中。
我现在的问题是,我为加载状态制作了一个特定的UI,当我知道某些UI打开速度很慢时,我会显示我的加载状态UI,当UI结束打开时,我会关闭我的加载状态UI 。在这个加载状态UI我打了一个QMovie(GIF动画)和一个简单的QLabel写的“加载......”,非常简单,对吗? Buuuut,当我使用这个特定的UI时,QMovie不起作用。实际上它并没有停留在循环中...看,当我在UI中使用QMovie而不是我打开时,QMovie保持循环。
我的英语不太好,但你了解我的问题吗? = /
我使用相同的链接代码:
this->m_pMovie = new QMovie(":/ui/images/my_image_loading.gif");
this->m_pMovie->setScaledSize(QSize(50, 50));
this->ui->labelImageLoading->setMovie(this->m_pMovie);
this->m_pMovie->start();
有人知道吗?
谢谢...
答案 0 :(得分:2)
您使用QMovie的方式一切正常。这只是一个猜测,但我想知道你的QMovie是否因为GUI线程太忙而没有更新。如果您的UI加载速度很慢,那么这种缓慢可能是因为它在GUI线程上消耗了大量的处理。这是尝试更新QMovie的相同的线程。结果:您的QMovie永远不会更新,因为它依赖于相同的GUI线程来获取其更新。
如果在UI加载过程中有任何地方可以对QApplication::processEvents()
进行一些调用,那么就可以更新电影了。但它可能会起伏不定。
否则,除了试图找到一种方法来加快这些UI加载之外,你真的没什么可做的。 (将它们分成不同的窗口,只需布局,分成根据需要加载的标签等)。