消息关闭
    暂无新消息!

qt5 等待对话框 QMovie

问题作者 : 傻YO2017-08-10发布
我先新建了个对话框类,里边别的都没有做,就是添加个label,然后用QMovie播放一个gif。然后在我进行一个耗时操作之前,我就显示这个对话框,耗时操作结束后,关闭对话框。现在的问题是,显示对话框时,用exec可以正常播放gif但是消息阻塞,不关闭对话框就不会继续后面的操作,用show倒是可以继续后面的操作,但是gif无法正常播放,另外添加个label显示个文字,也都显示不出来。这个是什么问题造成的?应该怎么解决?
求指点。。
下面是对话框类的代码
#include "DlgProgress.h"
#include "ui_DlgProgress.h"

DlgProgress::DlgProgress(QWidget *parent) :
    QDialog(parent)
{
    label = new QLabel();
    this->setFixedSize(400,100);
    this->setWindowTitle("Please wait......");
    label->setScaledContents(true);
    movie = new QMovie(":/new/prefix1/progress.gif");
    label->setMovie(movie);
    movie->start();
}

DlgProgress::~DlgProgress()
{
    delete label;
    delete movie;
}


#ifndef DLGPROGRESS_H
#define DLGPROGRESS_H

#include <QDialog>
#include "qlabel.h"
#include "qmovie.h"

namespace Ui {
class DlgProgress;
}

class DlgProgress : public QDialog
{
    Q_OBJECT

public:
    explicit DlgProgress(QWidget *parent = 0);
    ~DlgProgress();

    QMovie *movie;
    QLabel *label;

private:
    Ui::DlgProgress *ui;
};

#endif // DLGPROGRESS_H


调用对话框的代码
    DlgProgress pdlgprocess;
    pdlgprocess.setModal(true);
    pdlgprocess.show();

2个回答

︿ 3
耗时操作放到子线程里去搞就行了啊,主线程,也就是UI线程,还是调用你这个窗体的exec来运行,耗时操作处理完,给你这个窗体发个信号通知可以close,就欧了。
︿ 1
如楼上所说,耗时操作必须放到线程里面进行,否则会让主线程无法处理事件,造成僵死。耗时操作线程处理可通过信号槽跟主线程交互。