Я использую QT для реализации некоторой программы пользовательского интерфейса. В этой программе мне нужен диалог прогресса. Я попытался использовать встроенный QProgressDialog, он отлично работает, но в моем случае мне нужно подтвердить (с другим диалогом), когда нажата кнопка «Отменить».реализовать диалог выполнения QDialog
В QProgressDialog после нажатия кнопки отмены диалог выполнения будет отменен, поэтому я попытался реализовать свой собственный диалог выполнения (очень просто, диалог с индикатором выполнения). Однако, если я использую свой собственный диалог прогресса, есть некоторые проблемы. Его нельзя переместить или щелкнуть. Как только я попытался переместить его и потеря его в диалоговом режиме, индикатор прогресса больше не обновится, и он не сможет снова получить фокус. Я попытался установить другую модальность, но либо Qt :: ApplicationModal, либо Qt :: WindowModal имеет ту же ситуацию.
следует мой класс диалога прогресса, если кто-то знает, как изменить QProgressDialog, чтобы выполнить требование подтверждения, или где проблема в моем коде.
Заголовок:
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
void setRange(int minimum, int maximum);
void setValue(int value);
void setLabelText(QString labtext);
bool wasCanceled();
private:
Ui::Dialog *ui;
bool cancelStatus;
private slots:
void cancel();
};
Источник:
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
cancelStatus = false;
ui->progressBar->setRange(0,1);
ui->progressBar->setValue(0);
//this->setWindowModality(Qt::WindowModal);
show();
}
Dialog::~Dialog(){
delete ui;
}
void Dialog::setRange(int minimum, int maximum){
ui->progressBar->setRange(minimum,maximum);
}
void Dialog::setValue(int value){
this->ui->progressBar->setValue(value);
}
void Dialog::setLabelText(QString labtext){
this->ui->label->setText(labtext);
}
void Dialog::cancel(){
// pop up the confirm dialog here
// cancelStatus = true if the confirm dialog is accepted, else do nothing .
}
bool Dialog::wasCanceled(){
return cancelStatus;
}
Я бы подкласс QProgressDialog, а затем просто вызвать другой диалог, когда кнопка отмены нажата. QMessageDialog может быть хорошим кандидатом. – Jay
Привет, Джеймс: Это то, что я делаю раньше. Однако проблема заключается в том, что сигнал «отменить» выдается после нажатия кнопки отмены, и диалог будет отменен, как я уже упоминал ранее. Я хочу, чтобы он был отменен только после подтверждения. –