• 9253阅读
  • 6回复

[提问]QProgressBar 无限循环问题 [复制链接]

上一主题 下一主题
离线feitian542
 

只看楼主 倒序阅读 楼主  发表于: 2011-04-22
知道函数func()在调用过程中非常耗时,所以希望在调用过程中出现一个无线循环的对话框让用户等待。查了一些资料说是设置maxinum为0 可以无限循环,但是当我调用show函数的进度条只有一个头部和边框,中间没有滚动内容,
当调用exec出现滚动条但是阻止了程序的继续执行,代码如下。有谁遇到过相似问题,麻烦给提示下,给个解决思路!
代码如下:
    QProgressDialog dlg(this);
    dlg.setWindowModality(Qt::WindowModal);
    dlg.setMinimumDuration(0);
    dlg.setLabelText(tr("请等待!"));
    dlg.setMinimum(0);
    dlg.setMaximum(0);
    dlg.setCancelButton(0);
    dlg.show();
   func();
dlg.reset();
离线dbzhang800

只看该作者 1楼 发表于: 2011-04-22
引用楼主feitian542于2011-04-22 21:01发表的 QProgressBar 无限循环问题 :
知道函数func()在调用过程中非常耗时,所以希望在调用过程中出现一个无线循环的对话框让用户等待。查了一些资料说是设置maxinum为0 可以无限循环,但是当我调用show函数的进度条只有一个头部和边框,中间没有滚动内容,
当调用exec出现滚动条但是阻止了程序的继续执行,代码如下。有谁遇到过相似问题,麻烦给提示下,给个解决思路!
代码如下:
    QProgressDialog dlg(this);
    dlg.setWindowModality(Qt::WindowModal);
.......

莫非你这个耗时的函数在主线程中?
[ 此帖被dbzhang800在2011-04-22 21:44重新编辑 ]
离线wxj120bw

只看该作者 2楼 发表于: 2011-04-22
楼主的滚动条只是等待,没有其他交互操作,放到主线程应该没有问题?滚动条的最大值和最小值设置为0的确滚动条无限滚动,建议楼主单独测试下。
离线jdwx

只看该作者 3楼 发表于: 2011-04-23
引用第1楼dbzhang800于2011-04-22 21:44发表的  :
莫非你这个耗时的函数在主线程中?

要是这样的话,进度条不会动。看看你的任务管理器,CPU到100了没有?
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线feixiangxtu

只看该作者 4楼 发表于: 2011-04-23
给你个思路:可以加载一个GIF格式的图片。
离线peterlin82

只看该作者 5楼 发表于: 2011-04-25
func();加入以下程式码试试:
QApplication::processEvents();
离线chyaini

只看该作者 6楼 发表于: 2011-05-12
最近我也遇到了这个问题,把耗时的函数单独放到一个进程中,进度条窗口出现了,但是还是假死状态,不能响应操作。

代码如下:
  1.     m_Thread = new myThread();
  2.     connect(m_Thread, SIGNAL(threadSignal()), this, SLOT(testForThread()));
  3.     m_Thread->start(QThread::LowestPriority);
  4.     QProgressDialog progressDlg(tr("Creating Thumbnail..."), tr("cancel"), 0, 0, this);
  5.     progressDlg.setWindowModality(Qt::WindowModal);
  6.     progressDlg.exec();
win7+VS2010+Qt4.7+opencv2.2
图像处理
快速回复
限100 字节
 
上一个 下一个