关闭/中止QProgressDialog的问题

时间:2013-01-21 14:33:30

标签: qt qtconcurrent

我现在正在为为控制台操作编写的项目原件添加GUI。我选择Qt作为框架,现在面临处理QProgressDialog的紧密事件的困难。

问题1:我使用QtConcurrent :: run来分叉一个长/重任务的进程,以及一个'等待'QProgressDialog(范围为0,0)来提示用户进行长时间运行的进程。问题是我不能让对话框关闭!

void MainWindow::doLongRunProcess() {
  pDialog = new QProgressDialog("Loading 2 ...", "Abort", 0, 0, this);
  pDialog->setWindowModality(Qt::WindowModal);
  pDialog->show();
  QFuture<void> future = QtConcurrent::run(theApp, &SimApplication::runSimulation);
  QFutureWatcher<void> watcher;
  connect(&watcher,
        SIGNAL(finished()),
        this,
        SLOT(endLongRunProcess()));
  watcher.setFuture(future);
  // at this point, the runSimulation is successfully invoked
}

void MainWindow::endLongRunProcess()
{
  // no sign of being invoked!
  if (pDialog)
  {
      pDialog->close();
      delete pDialog;
  }
  logMessage("Operation completed");
}

要求1:如果可能,请不要触摸/更改原始包裹的代码。

问题2:如何链接“abort”按钮以终止SimApplication :: runSimulation()?

1 个答案:

答案 0 :(得分:0)

创建对话框后尝试在对话框中调用setAttribute(Qt::WA_DeleteOnClose, true),并将finished()附加到对话框的close()广告位,而不是您的广告位。 }时,对话框会在适当的时候自行删除。