【问题标题】:Problems using QMovie with GIF animation in a QLabel在 QLabel 中使用带有 GIF 动画的 QMovie 时出现问题
【发布时间】:2013-07-26 01:51:30
【问题描述】:

我已经为我的问题搜索了一些解决方案,但一无所获...我在一个 QLabel 中使用带有 GIF 动画的 QMovie 来获取加载状态,好吗?这很简单,我在这个链接中学到了:GIF animation in Qt,当我打开一个菜单时,这非常有效,例如,拥有一个标签,我将 QMovie 放在该菜单的 QLabel 中。

我现在的问题是,我为加载状态制作了一个特定的 UI,当我知道某些 UI 会很慢打开时,我会显示我的加载状态 UI,当 UI 结束打开时我会关闭我的加载状态 UI .在这个加载状态 UI 中,我放了一个 QMovie(GIF 动画)和一个简单的 QLabel,写着 'Loading...',很简单,对吧? Buuuut,当我使用这个特定的用户界面时,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();

有人知道吗?

谢谢...

【问题讨论】:

    标签: qt animated-gif qlabel


    【解决方案1】:

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

    如果在 UI 加载过程中有任何地方您可以调用 QApplication::processEvents(),这将使影片更新。但它可能很不稳定。

    否则,除了设法让这些 UI 加载得更快之外,您真的无能为力。 (将它们分离到不同的窗口,简单的布局,分解成按需加载的选项卡等)

    【讨论】:

    • 我理解@Dave...我确实使用过QApplication::processEvents(),但忘记在这里写了。好吧,使用 processEvents() 方法,我的 QLabel 与 QMovie 被显示,但动画保持静态。但现在我明白了为什么......因为我打开的新 UI 和我的加载状态 UI 在同一个线程中,GUI 线程,对吗?谢谢你的解释!我会为此寻找另一种解决方案,但我相信不可能使用我的 GIF 来加载状态,因为另一个问题是如果我打开另一个线程,我也无法在 UI 中绘画......跨度>
    • 一种解决方案是生成一个全新的QProcess 来启动“等待...”应用程序。然后在加载 UI 后终止该进程。然后你有两个 GUI 线程(在两个不同的进程上)。当然,这会带来自己的问题,而且有点沉重。但如果没有办法缩短主 UI 的加载时间,它可能会起作用。
    猜你喜欢
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    相关资源
    最近更新 更多