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

标签 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 命令结束时自行关闭。我有哪些选择?

最佳答案

你应该这样做:

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(); 时它也会阻塞,这意味着您的循环不会完成。

关于c++ - 在 Qt 中如何运行进度条以指示其他进程正忙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17189751/

相关文章:

c++ - QT 是适合我的跨平台应用程序的解决方案吗?

python - 工作线程阻塞 GUI 中的 QTimer

c++ - 使用 FFMPEG 将 RGB 图像序列保存到 .mp4 时遇到问题

c++ - 在输入错误的密码时锁定应用程序 (c/c++)

c++ - GCC 编译器支持经典 C++ 吗?

c++ - Qt:在 QGraphicsView/QGraphicsScene 上有一个 child 的 QWidget 不工作

c++ - 是否可以重命名已在使用的 xls 文件?

c++ - 将 Armadillo 添加到 Qt 项目

python - 如何使用 Qthread 通过 PyQt 更新 Matplotlib 图?

c++ - Qt 同步原语可以与非 QThread 线程一起使用吗?