Question

J'utilise QT pour mettre en œuvre certains programmes d'assurance-chômage. Dans ce programme, je besoin d'un dialogue de progression. J'ai essayé d'utiliser la construction en QProgressDialog, il fonctionne très bien, mais dans mon cas, je dois confirmer (avec une autre boîte de dialogue) lorsque le « bouton Annuler » est cliqué.

Dans QProgressDialog une fois sur le bouton Annuler est cliqué, la boîte de dialogue de progression sera annulée, donc, j'ai essayé de mettre en œuvre ma propre boîte de dialogue de progression (très simple, une boîte de dialogue avec barre de progression). Cependant, si j'utilise ma propre boîte de dialogue de progression, il y a quelques problèmes. Il ne peut pas être déplacé ou cliqué. Une fois que j'ai essayé de le déplacer et la perte de son dialogue mise au point, la barre de progression ne sera pas mise à jour plus et il ne peut pas gagner à nouveau la mise au point. J'ai essayé de définir différents Modality, mais soit Qt :: ApplicationModal ou Qt :: WindowModal a la même situation.

suit est ma progression classe de dialogue, si quelqu'un sait comment modifier QProgressDialog pour répondre à l'exigence de confirmation ou où est le problème dans mon code.

En-tête:

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();
};

Source:

#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;
}
Était-ce utile?

La solution

De la documentation Qt: Le signal QProgressDialog :: annulé () est émis lorsque le bouton d'annulation est cliqué et il est relié à la fente par défaut annuler ().

Avez-vous essayé de connecter le signal à vous annulé propre fente de validation, et annuler la boîte de dialogue si l'utilisateur de confirmer est le choix?

Avant, connecter votre propre logement, débranchez le signal annulé de la fente annuler à l'aide QObject :: disconnect (): http://doc.qt.io/archives/qt-4.7/qobject.html#disconnect

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top