Qdialogによる進行状況ダイアログを実装します
-
29-09-2019 - |
質問
QTを使用してUIプログラムを実装しています。このプログラムでは、進行状況ダイアログが必要です。ビルドインqprogressdialogを使用しようとしましたが、正常に動作しますが、私の場合、「キャンセルボタン」がクリックされたときに(別のダイアログで)確認する必要があります。
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;
}
解決
QTドキュメントから:Signal QProgressDialog :: canceled()は、キャンセルボタンがクリックされ、デフォルトでcancel()スロットに接続されたときに放出されます。
キャンセルされた信号を自分の検証スロットに接続しようとしましたか?ユーザーが選択している場合、ダイアログをキャンセルしようとしましたか?
以前は、独自のスロットを接続して、qobject :: disconnect()を使用してキャンセルスロットからキャンセルされた信号を切断します。 http://doc.qt.io/archives/qt-4.7/qobject.html#disconnect