我尝试使用 aQProgressDialog
给用户一些关于一个长任务的进度的信息,同时允许他取消这个任务。
基本上,我有一个QDialog
带按钮的Compute
。QDialog
通过单击它,会在 my的父级成员上调用一个耗时的方法。这个方法需要一个回调来告诉调用者工作的进度。
问题是进度对话框在出现之前需要一些时间,并且不会立即考虑单击其Cancel
按钮。
很明显我的代码有问题,但是我不习惯 Qt,我尝试了很多东西。我可能需要一个单独的线程。
我的代码摘录:
void MyDialog::callbackFunction(int value, void * objPtr) {
((QProgressDialog *)(objPtr))->setValue(value);
QCoreApplication::processEvents();
}
void MyDialog::on_mComputeBtn_clicked()
{
Compute();
}
void MyDialog::Compute()
{
QProgressDialog progressDialog("Optimization in progress...", "Cancel", 0, 100, this);
progressDialog.setMinimumDuration(500); // 500 ms
progressDialog.setWindowModality(Qt::WindowModal);
progressDialog.setValue(0);
connect(&progressDialog, SIGNAL(canceled()), this, SLOT(Cancel()));
QCoreApplication::processEvents();
parentMember->LongComputation(callbackFunction);
// probably useless
progressDialog.reset();
progressDialog.hide();
QCoreApplication::processEvents();
}