我现在正在为为控制台操作编写的项目原件添加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()?
答案 0 :(得分:0)
创建对话框后尝试在对话框中调用setAttribute(Qt::WA_DeleteOnClose, true)
,并将finished()
附加到对话框的close()
广告位,而不是您的广告位。 }时,对话框会在适当的时候自行删除。