【问题标题】:Qt - Display animated GIF selected by QListWidget on MainWindowQt - 在 MainWindow 上显示由 QListWidget 选择的动画 GIF
【发布时间】: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 操作它?

【问题讨论】:

    标签: c++ qt animation animated-gif qt-designer


    【解决方案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();
    

    新手错误...

    【讨论】:

      猜你喜欢
      • 2014-06-10
      • 1970-01-01
      • 2011-08-11
      • 2011-02-25
      • 1970-01-01
      • 2016-12-07
      • 2012-09-15
      • 2013-03-14
      • 1970-01-01
      相关资源
      最近更新 更多