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中的ui_mainwindow.h文件是自动创建的吗,还是要手动输入啊,我看别人的源码都不显示这个头文件