为什么我的窗口没有显示任何QPixmap图片?

时间:2018-11-06 16:39:21

标签: c++ qt qt5 qpixmap

我正在尝试制作一个显示.gif的基本窗口,但没有显示。我确保文件与main.cpp位于同一目录中。我尝试了其他文件扩展名,但仍然无法正常工作。

#include <QApplication>
#include <QBoxLayout>
#include <QLabel>
#include <iostream>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QWidget *window = new QWidget;
window->setFixedSize(640, 480);

QLabel *gif_anim = new QLabel();
QPixmap const *movie = new QPixmap("sea.gif");
gif_anim->setPixmap(*movie);

QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(gif_anim);

std::cout << movie->isNull() << std::endl;

window->setLayout(layout);
window->show();

return a.exec();
}

我使用isNull()方法进行了测试,它告诉我QPixmap为空(我不知道为什么)。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您遇到以下错误:

  • QPixmap不支持gif格式,如果要显示gif,则必须使用QMovie。

  • 文件的路径是相对于可执行文件而不是源代码的,因此在这些文件中,我使用一个小命令将文件从源代码文件夹复制到构建文件夹。

考虑到上述情况,解决方案是:

*。pro

COPY_CONFIG = sea.gif
copy_cmd.input = COPY_CONFIG
copy_cmd.output = ${QMAKE_FILE_IN_BASE}${QMAKE_FILE_EXT}
copy_cmd.commands = $$QMAKE_COPY_DIR ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
copy_cmd.CONFIG += no_link_no_clean
copy_cmd.variable_out = PRE_TARGETDEPS
QMAKE_EXTRA_COMPILERS += copy_cmd

main.cpp

QWidget window;
window.setFixedSize(640, 480);
QLabel *gif_anim = new QLabel();
QMovie *movie = new QMovie("sea.gif");
gif_anim->setMovie(movie);
movie->start();
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(gif_anim);
window.setLayout(layout);
window.show();

答案 1 :(得分:1)

我将QMovie用于gif动画而不是QPixmap:

QLabel *gif_anim = new QLabel();
QMovie *movie = new QMovie("sea.gif");
gif_anim->setMovie(*movie);
movie->start();

我通常检查Qt中支持的图像格式。您可以使用以下代码进行操作:

qDebug() << "Supported image formats: " << QImageReader::supportedImageFormats();