Frage

Ich bin mit QT einig UI-Programm zu implementieren. In diesem Programm brauche ich einen Fortschrittsdialog. Ich habe versucht, die Build-in QProgressDialog zu verwenden, es funktioniert gut, aber in meinem Fall muss ich bestätigen (mit einem weiteren Dialog), wenn Sie die Taste „Abbrechen“ geklickt wird.

In QProgressDialog einmal die Löschtaste gedrückt, wird der Fortschritt Dialog abgebrochen werden, so habe ich versucht, meinen eigenen Fortschritt Dialog zu implementieren (sehr einfach, ein Dialog mit Fortschrittsbalken). Allerdings, wenn ich meine eigenen Fortschrittsdialog verwenden, gibt es einige Probleme. Es kann nicht verschoben oder angeklickt werden. Einmal habe ich versucht, es und den Dialog Verlust seines Fokus zu verschieben, wird der Fortschrittsbalken nicht mehr aktualisieren und erneut den Fokus nicht gewinnen. Ich habe versucht, verschiedene Modality zu setzen, aber entweder Qt :: ApplicationModal oder Qt :: WindowModal hat die gleiche Situation.

folgt, ist meine Fortschritt Dialogklasse, wenn jemand weiß, wie QProgressDialog zu ändern, die Bestätigung Anforderung zu erfüllen oder wo ist das Problem in meinem Code.

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

Quelle:

#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;
}
War es hilfreich?

Lösung

Von der Qt-Dokumentation: Das Signal QProgressDialog :: abgebrochen () ausgegeben wird, wenn die Löschtaste angeklickt wird, und es ist mit dem cancel () Slot standardmäßig.

Haben Sie versucht, die ungültige Signal an Sie eigene Validierungs Slot zu verbinden, und das Abbrechen den Dialog, wenn der Benutzer bestätigen Wahl ist?

Vor, Ihren eigenen Steckplatz anschließen, trennen Sie das kompensierten Signals aus dem Schlitz Abbrechen mit QObject :: disconnect (): http://doc.qt.io/archives/qt-4.7/qobject.html#disconnect

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top