Внедрить диалог прогресса от QDialog
-
29-09-2019 - |
Вопрос
Я использую QT для реализации некоторой программы пользовательского интерфейса. В этой программе мне нужен диалог прогресса. Я попытался использовать встроенную QProgressDialog, он работает нормально, но в моем случае мне нужно подтвердить (с помощью другого диалога), когда нажата кнопка «Отмена».
В QprogressDialog после нажатия кнопки «Отмена», диалоговое окно прогресса будет отменено, поэтому я пытался реализовать свой собственный диалог прогресса (очень простой, диалоговое окно с панелью прогресса). Однако, если я использую свой собственный диалог прогресса, есть некоторые проблемы. Его нельзя перемещать или нажать. Как только я попытался переместить его, и диалоговое количество потери его фокусировки, BAR прогресса больше не будет обновлять, и он не может получить фокус снова. Я пытался установить другую модальность, но либо QT :: PhotionModal или 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;
}
Решение
Из документации Qt: сигнал QprogressDialog :: Отменен () испускается, когда нажата кнопка «Отмена», и она подключена к слоту «Отмена ()».
Вы пытались подключить отмененный сигнал к собственному слоту проверки и отменить диалог, если пользователь подтвердит выбор?
Раньше, подключение собственного слота, отсоедините аннулированный сигнал от слота отмены с помощью Qobject :: Disconnect (): http://doc.qt.io/archives/qt-4.7/qobject.html#disconnect