Я пытаюсь использовать 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();
}