有好几种做法:
1、把等待处理的东西弄到线程里面处理,主线程显示一个模态对话框。(不好用,因为QT的子线程不能操作UI,如果你需要操作UI的话)。
2、只用一个主线程来进行处理,把你的5秒处理过程弄成回调函数,回调指针传到模态对话框里面。
大致这样:
void ShowModelDlg(..., pFun *pCallbackFun)
{
DialogMsg *pDlg = new DialogMsg(..., MSGTYPE_CANCEL);
pDlg->setModel(ture);
Show(pDlg);
pCallBackFun();
pDlg->hide();
delete pDlg;
pDlg = NULL;
}//ShowModelDlg()全局函数,供其他文件调用,pCallbackFun是你要执行的那个等待操作的函数指针。
3、弄一个QFrame盖在父窗口上,然后新建个QLabel进行加载一个转圈等待的那个gif。
然后对QFrame和Qlabel位置进行控制。
注,可以弄成单例模式供其他地方调用
大致实现是这样:
CWaitFrame::CWaitFrame()
{
m_pLabel = new QLabel(this);
m_pMovie = new QMovie("Movie,gif");
//设置背景色
...;
//设置透明度为半透明
....;
}
void CWaitFrame::Show(QWidget* parent,.....)//需要什么参数自己在加成有默认参数的
{
if(m_parent != parent)
{
setParrent(parent);//要覆盖的窗口指针
//调整CWaitFrame大小为父窗口的指针
resize(...);
// 设置m_pLabeld的显示位置
m_pLabel->setGeomeng(...);
}
m_pLabel->setMovie(m_pMovie);
m_pMovie->start();
}
void CWaitFrame::Hide(.....)
{
//结束时候调用这个
}
然互通过模板写哥单例类
记得一点:
然互通过模板写哥单例类把CWaitFrame用弄成单例模式,大家都可以方便调用;
到时候大概这样调用
TheSigleWaitFrame::inistanc()->Show(...)
没VS2008不方便写,写个大概,希望看得懂