4

我正在处理一个项目,我需要向用户显示“忙碌的进度条”或“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 命令结束时自行关闭。我有哪些选择?

4

2 回答 2

4

你应该这样做:

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();意味着您的循环不会完成。

于 2013-06-19T11:27:53.670 回答
0

只有当传递给的值达到设置的值QProgressDialog时才会关闭。setValuesetMaximum

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

于 2013-06-19T11:22:57.087 回答