如何在Qt中运行进度条以指示其他进程正忙

时间:2013-06-19 11:16:00

标签: c++ qt qthread

我正在处理一个项目,我需要向用户显示一个“忙碌进度条”或“GUI元素”,直到另一个进程完成。有没有办法我可以不使用线程来做到这一点。如下所示的片段:

     QProcess compile;
     QProgressDialog *dialog = new QProgressDialog();
     dialog->setMinimum(0);
     dialog->setMaximum(0);

     compile.start("make", QStringList()<< send.at(2) << "-j6" << "IN=" + QFileInfo(send.at(0)).absolutePath() + "/" +QFileInfo(send.at(0)).baseName() << "OUT=/home/venkatesh/MooNMD_Working/ParMooN_Out/cd2d/" + send.at(1) + ".exe" << "&");
     while(compile.waitForFinished(-1))
     {
          dialog->exec();
     }
     dialog->close();

但繁忙的进度条在make命令结束时并没有关闭它。我有什么选择?

2 个答案:

答案 0 :(得分:3)

你应该这样做:

QProcess compile;
QProgressDialog *dialog = new QProgressDialog;
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->setRange(0,0);
connect(&compile, SIGNAL(finished(int)), dialog, SLOT(close()));

compiler.start("myprog.exe");
dialog->exec();

在循环中使用dialog->exec();毫无意义。当你打电话给dialog->exec();意味着你的循环无法完成时,它也会阻止。

答案 1 :(得分:0)

QProgressDialog只有在传递给setValue的值达到setMaximum设置的值时才会关闭。

您已将最小值和最大值都设置为0,因此对话框无法正常运行。