• 11529阅读
  • 6回复

[提问]QT开发中,关于耗时窗口等待过程中,如何显示一个过渡窗口(已解决) [复制链接]

上一主题 下一主题
离线justidle
 

只看楼主 倒序阅读 楼主  发表于: 2012-11-02
本人是一个QT新手,目前在arm-linux-gcc 3.4.1和qte4.6.2下开发一个7寸屏的应用.
在开发过程中有如下的一个需求
1 在QMainWindow中通过点击一个按钮创建另外一个QDialog实例
2 这个要创建的QDialog实例需要大量的时间才能显示.
3 现在使用的时候,出现这样一个现象,当点击了按钮后,系统要过3-5秒才出现新的窗口.
目前代码的基本框架是这样的
QMyDlg dlg;
dlg.exec();
目前想做个改进.想法是这样的:
当用户点击按钮的时候,先出现一个无边框的窗口,显示一个等待图标,等QMyDlg创建完成后,关闭这个过渡窗口,将QMyDlg显示出来.
但是我对QT不够了解,老是无法实现这样的想法.即使使用QSplash,也是通过的问题.
就是点击按钮后,要等待不少时间,才出现QSplash窗口,而且QSplash窗口过了1秒不到就消失, QMyDlg要在Splash消失后几秒才出现.
谢谢,主要是QT的框架和MFC差别太大.
离线XChinux

只看该作者 1楼 发表于: 2012-11-02
你用QLabel直接显示个小图放上去(要指定parent,让它在当前界面上居中显示),等窗口显示完成了,再delete这个QLabel.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线justidle

只看该作者 2楼 发表于: 2012-11-02
您的意思是在QMyDlg dlg的构造函数中,创建一个QDialog,在这个QDialog中有一个QLabel,然后QMyDlg完成后,在删除QDialog吗?
离线yangxiangyuh

只看该作者 3楼 发表于: 2012-11-02
不用再新建QDialog,直接再你那现在的QDialog里加个QLable就行。另外,函数的操作做好放在一个slot里,用QTimer::singleShot()加载。具体用法请查help。
离线yangxiangyuh

只看该作者 4楼 发表于: 2012-11-02
回 3楼(yangxiangyuh) 的帖子
打错,是耗时的操作,不是函数。。。
离线justidle

只看该作者 5楼 发表于: 2012-11-02
4楼,您的方法可行。就是笨点,不过能满足要求先用吧。谢谢。
现在的方法如下:
在QMyDlg ui中添加一个QLabel,使得该QLabel居中,我给这个取名为qlWait,并设置好QPixmap。在构造函数如下
QMyDlg::QMyDlg()
{
    m_pUi->qlWait->setAttribute(Qt::WA_TranslucentBackground);
    m_pUi->qlWait->setVisible(true);
    QTimer::singleShot(1000, this, SLOT(slotInit()));    
}
设置该控件可见,通过QTimer启动初始化。
void QMyDlg::slotInit()
{
   做我自己的初始化
  m_pUi->qlWait->setVisible(false);
}
离线justidle

只看该作者 6楼 发表于: 2012-11-02
有没有更好的解决方法,这种方法需要在每个窗口都增加这样的函数.体力活.
快速回复
限100 字节
 
上一个 下一个