我现在正在将 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:如何链接“中止”按钮来终止 SimApplication::runSimulation()?