سؤال

أنا أستخدم QT لتنفيذ بعض برنامج واجهة المستخدم. في هذا البرنامج ، أحتاج إلى مربع حوار تقدم. حاولت استخدام QProgressDialog بناء ، ولكن في حالتي ، أحتاج إلى تأكيد (مع مربع حوار آخر) عند النقر فوق "زر" الإلغاء ".

في QProgressDialog بمجرد النقر فوق الزر "إلغاء" ، سيتم إلغاء مربع حوار التقدم ، لذلك ، حاولت تنفيذ مربع حوار التقدم الخاص بي (بسيط للغاية ، مربع حوار مع شريط التقدم). ومع ذلك ، إذا استخدمت مربع حوار التقدم الخاص بي ، فهناك بعض المشاكل. لا يمكن نقله أو النقر عليه. بمجرد أن حاولت تحريكه وفقدان حوار تركيزه ، لن يتم تحديث شريط التقدم بعد الآن ولا يمكنه الحصول على التركيز مرة أخرى. حاولت ضبط طريقة مختلفة ، ولكن Qt :: ApplicationModal أو 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 :: disnockonnect (): http://doc.qt.io/archives/qt-4.7/qobject.html#disconnect

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top