Почему мое окно не показывает картинку QPixmap? - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь сделать основное окно, которое показывает .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 имеет значение null (я не знаю почему).

Ваша помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Я использую 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();
0 голосов
/ 06 ноября 2018

У вас есть следующие ошибки:

  • QPixmap не поддерживает формат GIF, если вы хотите показать GIF, вы должны использовать QMovie.

  • Путь к файлу указан относительно исполняемого файла, а не исходного кода, поэтому в них я использую небольшую команду для копирования файлов из папки с исходным кодом в папку сборки.

Учитывая вышеизложенное, решение:

*. Про

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