Как поставить GIF внутри QMainWindow - PullRequest
0 голосов
/ 02 апреля 2012

Привет всем, я хочу поместить файл loader.gif в мой QMainWindow.Я хочу иметь черный фон и этот элемент QMovie посередине.

Вот мой код, и он ничего не делает.

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{
    QMovie *movie = new QMovie(":/slike/Loading_Animations.gif");
    QLabel *processLabel = new QLabel(this);
    processLabel->setMovie(movie);
    movie->start()

    //how to assign this to my UI
}

Ответы [ 3 ]

0 голосов
/ 03 апреля 2012

В какой-то момент вам нужно будет позвонить processLabel->show() для вашего главного окна для отображения фильма.Если gif зациклен, он будет повторяться бесконечно.В противном случае он будет воспроизводиться один раз.

Поскольку вы наследуете Ui :: MainWindow, я предполагаю, что вы используете Qt Designer для разметки своего окна.Возможно, вам будет полезно добавить processLabel в интерфейс пользователя в Qt Designer.Вы можете настроить таблицу стилей (добавить черный фон) графически, а затем просто позвонить ui->setupUi(this) перед добавлением фильма.Вот пример кода, который работает для меня:

#include <QMovie>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //calling setupUi creates processLabel and positions it and shows it correctly
    QMovie *movie = new QMovie(":/slike/Loading_Animations.gif");
    processLabel->setMovie(movie);
    movie->start();
    //if you haven't already called show for your main window call it
    this->show();
}

В противном случае, прежде чем показывать свой QLabel, убедитесь, что вы:

  1. покажите свое главное окно.
  2. Установить геометрию (вызов QLabel::setGeometry(x,y,width,height))
  3. Если gif больше, чем метка, обязательно наберите QLabel::setScaledContents(true)
  4. Наконец, позвоните QLabel::show().
0 голосов
/ 20 сентября 2018

Вы забыли добавить точку с запятой (;) после вызова функции start().

0 голосов
/ 03 апреля 2012

Как я вижу, вы не поместили метку в макет, и вы не установили макет

...