3

我已经为我的问题搜索了一些解决方案,但什么也没有……我在一个 QLabel 中使用带有 GIF 动画的 QMovie 来获取加载状态,好吗?这很简单,我在这个链接中学到了:Qt 中的 GIF 动画,例如,当我打开一个菜单时,它完美地工作,而不是拥有一个标签,我将 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();

有人知道吗?

谢谢...

4

1 回答 1

3

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

如果在 UI 加载过程中有任何地方可以调用QApplication::processEvents(),那将更新电影。但它可能是波涛汹涌的。

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

于 2011-12-13T18:34:59.977 回答