Вопрос

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

В QprogressDialog после нажатия кнопки «Отмена», диалоговое окно прогресса будет отменено, поэтому я пытался реализовать свой собственный диалог прогресса (очень простой, диалоговое окно с панелью прогресса). Однако, если я использую свой собственный диалог прогресса, есть некоторые проблемы. Его нельзя перемещать или нажать. Как только я попытался переместить его, и диалоговое количество потери его фокусировки, BAR прогресса больше не будет обновлять, и он не может получить фокус снова. Я пытался установить другую модальность, но либо QT :: PhotionModal или Qt :: WindowModal имеет ту же ситуацию.

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

Заголовок:

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;
}
Это было полезно?

Решение

Из документации Qt: сигнал QprogressDialog :: Отменен () испускается, когда нажата кнопка «Отмена», и она подключена к слоту «Отмена ()».

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top