реализовать диалог прогресса QDialog - PullRequest
1 голос
/ 05 ноября 2010

Я использую QT для реализации некоторой программы пользовательского интерфейса.В этой программе мне нужен диалог прогресса.Я попытался использовать встроенный QProgressDialog, он работает нормально, но в моем случае мне нужно подтвердить (с другим диалогом), когда нажата кнопка «Отмена».

В QProgressDialog после нажатия кнопки отмены диалоговое окно прогресса будет отменено, поэтому я попытался реализовать свой собственный диалоговое окно прогресса (очень простое, диалоговое окно с индикатором выполнения).Однако, если я использую свой собственный диалог прогресса, есть некоторые проблемы.Его нельзя переместить или щелкнуть.После того, как я попытался переместить его, и диалоговое окно утратило фокус, индикатор выполнения больше не будет обновляться и не сможет снова получить фокус.Я пытался установить другую Модальность, но Qt :: ApplicationModal или Qt :: WindowModal имеют ту же ситуацию.

Мой класс диалогового окна прогресса, если кто-то знает, как изменить QProgressDialog для удовлетворения требования подтверждения илипроблема в моем коде.

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

Источник :

#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;
}

1 Ответ

2 голосов
/ 08 ноября 2010

Из документации Qt: Сигнал QProgressDialog :: cancelled () испускается при нажатии кнопки отмены и по умолчанию подключается к слоту cancel ().

Вы пытались подключить отмененный сигнал к собственному слоту проверки и отменить диалоговое окно, если пользователь подтвердил выбор?

Перед подключением собственного слота отсоедините отмененный сигнал от слота отмены с помощью QObject :: disconnect (): http://doc.qt.io/archives/qt-4.7/qobject.html#disconnect

...