qt5 等待对话框 QMovie

流年碎影1321 2017-08-08 10:30:59
我先新建了个对话框类,里边别的都没有做,就是添加个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();
...全文
340 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
如楼上所说,耗时操作必须放到线程里面进行,否则会让主线程无法处理事件,造成僵死。耗时操作线程处理可通过信号槽跟主线程交互。
dinjay 2017-08-09
  • 打赏
  • 举报
回复
耗时操作放到子线程里去搞就行了啊,主线程,也就是UI线程,还是调用你这个窗体的exec来运行,耗时操作处理完,给你这个窗体发个信号通知可以close,就欧了。

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧