我正在尝试制作一个显示.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为空(我不知道为什么)。
感谢您的帮助。
答案 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();