【发布时间】:2018-02-12 10:30:10
【问题描述】:
我尝试使用QProgressDialog 向用户提供一些有关长任务进度的信息,同时允许他取消此任务。
基本上,我有一个QDialog 和一个按钮Compute。通过单击它,会在我的QDialog 的父级成员上调用一个耗时的方法。该方法通过回调告诉调用者工作进度。
问题是进度对话框在出现之前需要一些时间,并且不会立即考虑点击其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();
}
【问题讨论】:
标签: c++ qt qthread qprogressdialog