Я использую QT для реализации некоторой программы пользовательского интерфейса.В этой программе мне нужен диалог прогресса.Я попытался использовать встроенный QProgressDialog, он работает нормально, но в моем случае мне нужно подтвердить (с другим диалогом), когда нажата кнопка «Отмена».
В QProgressDialog после нажатия кнопки отмены диалоговое окно прогресса будет отменено, поэтому я попытался реализовать свой собственный диалоговое окно прогресса (очень простое, диалоговое окно с индикатором выполнения).Однако, если я использую свой собственный диалог прогресса, есть некоторые проблемы.Его нельзя переместить или щелкнуть.После того, как я попытался переместить его, и диалоговое окно утратило фокус, индикатор выполнения больше не будет обновляться и не сможет снова получить фокус.Я пытался установить другую Модальность, но Qt :: ApplicationModal или Qt :: WindowModal имеют ту же ситуацию.
Мой класс диалогового окна прогресса, если кто-то знает, как изменить QProgressDialog для удовлетворения требования подтверждения илипроблема в моем коде.
header:
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;
}