Qt - 在 MainWindow 上显示由 QListWidget 选择的动画 GIF

Posted

技术标签:

【中文标题】Qt - 在 MainWindow 上显示由 QListWidget 选择的动画 GIF【英文标题】:Qt - Display animated GIF selected by QListWidget on MainWindow 【发布时间】:2016-12-03 00:53:23 【问题描述】:

提前感谢您的阅读和帮助。

我正在尝试基于 QListWidget 制作一个 GIF 管理器,您可以在其中从列表中选择一个 GIF(使用 on_*_itemClicked,如下所示),它将在列表下方的空间中显示动画 GIF (或侧身,没关系)。

void MainWindow::on_listOfURL_itemClicked(QListWidgetItem *item)

    QLabel* lab = new QLabel(this);
    QMovie* mov = new QMovie(":/res/giftest/C:/Users/Rober/Desktop/giftest.gif");
    lab->setGeometry(200, 200, 200, 200);
    lab->setMovie(mov);
    lab->show();
    mov->start();

GUI screenshot of the program

我尝试过使用上面的代码,但它什么也没显示。只是徒劳无功,所以GIF路径是一样的,不用担心。

老实说,我在论坛和这个网站上搜索了很多关于 GIFS 和动画的代码,但我所看到的没有一个对我有用。

我应该如何进行?我想我应该在 UI 中使用一些图形 QWidget 并将其与函数 on_*_itemClicked 链接,以便它从 QListWidgetItem 获取图像的位置并显示我在 UI 中指向的位置。

我通过浏览 Mighty Google 得到了粘贴在这里的代码,这给我带来了一些疑问:

我创建了一个以 MainWindow 作为父窗口的 QLabel。好的,但它会出现在哪里? 我不能在 Designer 中创建一个小部件,我可以定义它的位置并让 GIF 正常工作吗?

我想我已经正确地解释了自己,如果不是让我知道的话。

编辑:我认为我需要的是一个位于主窗口内、位于 URL 列表下方的 QLabel。如何在 QtDesigner 中塑造 QLabel,然后在代码中使用相同的 QLabel 并使用 GIF 操作它?

【问题讨论】:

【参考方案1】:

我认为,您需要包含在 .pro 中

QTPLUGIN     +=  qgif    

并显示label->show();

当然你可以在设计器中添加东西。您可以添加您创建的自定义小部件,但您需要制作一个特殊项目,该项目将为 Designer 制作一个“插件”并在发布模式下构建它,然后将插件安装在适当的插件文件夹中。 为此,您应该确定这些已添加到 .pro 文件中:

CONFIG      += plugin
TEMPLATE    = lib
QT          += widgets uiplugin

然后你需要声明和实现从 QObject 和 QDesignerCustomWidgetInterface 派生的插件。

DO CHECK 有效性:mov->isValid() 依赖于良好外部资源的代码最终会成为小灾难的根源。程序要么需要一个插件的.dll,要么需要与之链接的静态插件

当您安装 Qt 时,您安装了名为 QtAssistant 的应用程序。好好利用它。这是很大的帮助。以及他们在 Qt 目录中获得的论坛和示例存储。 Qt5在线获取插件示例:http://doc.qt.io/qt-5/qtwidgets-tutorials-widgets-childwidget-example.html

【讨论】:

我已经包含了你所说的,甚至是 isValid()。看起来 GIF 是有效的,但它没有显示。【参考方案2】:

好的,我自己找到了答案。其实很傻:

我没有意识到我可以使用 ui->label 选择在 QtDesigner 中创建的 QLabel 并对其进行操作。

ui->label->setMovie(selectedGif);
      selectedGif->start();
      ui->label->show();

新手错误...

【讨论】:

以上是关于Qt - 在 MainWindow 上显示由 QListWidget 选择的动画 GIF的主要内容,如果未能解决你的问题,请参考以下文章

PyQtGraph 图在 Qt MainWindow 上显示不正确

为啥 Qt 中的 MainWindow 在启动程序后关闭?

QT修改mainwindow前的图标,在资源管理器上显示图标也改变

qt中的ui_mainwindow.h文件是自动创建的吗,还是要手动输入啊,我看别人的源码都不显示这个头文件

Qt MainWindow 不显示 MenuBar [关闭]

当 MainWindow 从另一个类(不在主函数中)启动时,QT ui 未显示