Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我的窗口没有';不显示任何QPixmap图片?_C++_Qt_Qt5_Qpixmap - Fatal编程技术网

C++ 为什么我的窗口没有';不显示任何QPixmap图片?

C++ 为什么我的窗口没有';不显示任何QPixmap图片?,c++,qt,qt5,qpixmap,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); QWidge

我正在尝试创建一个显示.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();
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QWidget*窗口=新的QWidget;
窗口->设置固定大小(640480);
QLabel*gif_anim=新的QLabel();
QPixmap const*movie=新的QPixmap(“sea.gif”);
gif_anim->setPixmap(*电影);
QHBoxLayout*布局=新的QHBoxLayout;
布局->添加小部件(gif\u动画);
std::cout isNull()设置布局(布局);
窗口->显示();
返回a.exec();
}
我使用isNull()方法进行了测试,它告诉我我的QPixmap为null(我不知道为什么)


非常感谢您的帮助。

您有以下错误:

  • 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();

我将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();

qDebug()在QPixmap的详细描述中,它表示支持gif:。尽管如此,我还是使用了您的解决方案,将sea.gif放在可执行文件旁边,但它仍然不起作用。此外,您的*.pro行使我的编译暂停,并在Qt Creator“shell”中提出了一个问题:“sea.gif是文件还是目录?”我不知道在哪里键入答案。@a.Neo您确定编译.gif时没有删除吗?,尝试使用.gif的完整路径,QPixmap允许显示.gif,但不允许显示动画。另一方面,.gif在main.cpp旁边?没关系,它现在可以工作了。我不应该将sea.gif放在可执行文件的同一目录中,而是放在上面一级。非常感谢。