Pregunta

Estoy usando QT para implementar un programa de interfaz de usuario. En este programa necesito un diálogo de progreso. He intentado utilizar la acumulación en QProgressDialog, funciona bien, pero en mi caso tengo que confirmar (con otro cuadro de diálogo) cuando el botón "Cancelar" se hace clic.

En QProgressDialog una vez que se hace clic en el botón Cancelar, el diálogo de progreso será cancelado, así, traté de poner en práctica mi propio diálogo de progreso (muy simple, un cuadro de diálogo con barra de progreso). Sin embargo, si uso mi propio diálogo de progreso, hay algunos problemas. No se puede mover o hacer clic. Una vez traté de desplazarlo y la pérdida de su enfoque de diálogo, la barra de progreso no se actualizará más y que no puede ganar de nuevo el enfoque. Me trató de establecer diferentes Modalidad, pero de cualquier Qt :: ApplicationModal o Qt :: WindowModal tiene la misma situación.

que sigue es mi clase de diálogo de progreso, si alguien sabe cómo modificar QProgressDialog para cumplir con el requisito de confirmar o dónde está el problema en mi código.

encabezado:

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

Fuente:

#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;
}
¿Fue útil?

Solución

A partir de la documentación de Qt: La señal QProgressDialog :: cancelado () se emite cuando la cancela se hace clic en el botón y se conecta a la cancel () ranura por defecto.

¿trató de conectar la señal cancelada a usted propia ranura de validación y el cancelar el diálogo si la confirmación del usuario es la opción?

Antes, conectando su propia ranura, desconecte la señal cancelada desde la ranura de cancelar el uso de QObject :: desconexión (): http://doc.qt.io/archives/qt-4.7/qobject.html#disconnect

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top