Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 在QLabel中使用QMovie和GIF动画时出现问题_Qt_Animated Gif_Qlabel - Fatal编程技术网

Qt 在QLabel中使用QMovie和GIF动画时出现问题

Qt 在QLabel中使用QMovie和GIF动画时出现问题,qt,animated-gif,qlabel,Qt,Animated Gif,Qlabel,我已经为我的问题找到了一些解决办法,但什么都没有。。。我在一个QLabel中使用带有GIF动画的QMovie作为加载状态,好吗?这很简单,我在这个链接中了解到:,例如,当我打开一个菜单时,这非常有效,而不是拥有一个标签,我将QMovie放在该菜单的QLabel中 我现在的问题是,我为加载状态创建了一个特定的UI,当我知道某些UI打开速度慢时,我会显示加载状态UI,当UI结束打开时,我会关闭加载状态UI。在这个加载状态UI中,我放了一个QMovie(GIF动画)和一个简单的QLabel,写着“加载

我已经为我的问题找到了一些解决办法,但什么都没有。。。我在一个QLabel中使用带有GIF动画的QMovie作为加载状态,好吗?这很简单,我在这个链接中了解到:,例如,当我打开一个菜单时,这非常有效,而不是拥有一个标签,我将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();
有人知道吗


谢谢您……

在您使用QMovie的过程中,一切看起来都很好。这只是一个猜测,但我想知道您的QMovie是否因为GUI线程太忙而没有更新。如果您有一个加载缓慢的UI,那么这种缓慢可能是因为它消耗了GUI线程上的大量处理。这与尝试更新QMovie的线程相同。结果:您的QMovie永远不会更新,因为它依赖于同一个GUI线程来绘制更新

如果在UI加载过程中的任何地方,您可以对
QApplication::processEvents()
进行一些调用,这将使电影得到更新。但它可能会波涛汹涌


否则,除了设法找到一种使UI加载更快的方法外,您实在无能为力。(将它们分为不同的窗口,只需布局,按需加载选项卡等)

我理解@Dave。。。我确实使用过QApplication::processEvents(),但忘了在这里写。使用processEvents()Methodos,我的QLabel和QMovie一起显示,但动画保持静态。但现在我明白了为什么。。。因为我打开的新UI和我的加载状态UI在同一个线程中,GUI线程,对吗?谢谢你的解释!我将为此搜索其他解决方案,但我相信不可能使用我的GIF作为加载状态,因为另一个问题是,如果我打开另一个线程,我也无法在UI中绘制…一个解决方案是生成一个全新的
QProcess
,启动“等待…”应用程序。然后在加载UI后终止进程。然后有两个GUI线程(在两个不同的进程上)。当然,这也会带来自身的问题,而且有点沉重。但是如果没有办法缩短主UI的加载时间,它可能会起作用。