Domanda

sto usando QT per implementare qualche programma UI. In questo programma ho bisogno di una finestra di avanzamento. Ho cercato di usare il build-in QProgressDialog, funziona benissimo, ma nel mio caso ho bisogno di confermare (con un altro dialogo) quando il pulsante "Annulla" si fa clic.

Nel QProgressDialog una volta il pulsante di annullamento viene cliccato, la finestra di dialogo di avanzamento viene annullata, così, ho cercato di implementare la mia finestra di avanzamento (molto semplice, una finestra di dialogo con barra di avanzamento). Tuttavia, se uso la mia finestra di avanzamento, ci sono alcuni problemi. Non può essere spostato o cliccato. Una volta ho provato a spostarlo e la perdita di dialogo la sua attenzione, la barra di avanzamento non aggiornerà più e non può ottenere di nuovo la messa a fuoco. Ho cercato di impostare diverse modalità, ma in entrambi i Qt :: ApplicationModal o Qt :: WindowModal ha la stessa situazione.

segue è la mia classe di dialogo di avanzamento, se qualcuno sa come modificare QProgressDialog fare fronte alla richiesta di conferma o dove è il problema nel mio codice.

intestazione:

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

Fonte:

#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;
}
È stato utile?

Soluzione

Dalla documentazione Qt: Il segnale QProgressDialog :: annullato () viene emesso quando il pulsante viene premuto annullare ed è collegato al cancel () fessura di default.

Hai provato a collegare il segnale annullata a voi proprio slot per la convalida e la annullare la finestra di dialogo se la conferma utente è scelta?

Prima, collegare il proprio alloggiamento, scollegare il segnale cancellato dallo slot annullare utilizzando QObject :: disconnessione (): http://doc.qt.io/archives/qt-4.7/qobject.html#disconnect

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top