簡體   English   中英

如何從QDialog返回數據?

[英]How to return data from QDialog?

我正在嘗試設計一個主窗口和一個QDialog,並找到從QDialog返回數據的最佳方法。

現在我正在從對話框中捕獲accepted()信號,之后我調用對話框返回數據的函數。 有沒有更好的方法?

這是我現在的工作代碼:

class MainWindow : public QMainWindow
{
// ...

public slots:
    void showDialog()
    {
        if (!myDialog)
        {
            myDialog = new Dialog();
            connect(myDialog, SIGNAL(accepted()), this, SLOT(GetDialogOutput()));
        }
        myDialog->show();
    }
    void GetDialogOutput()
    {
        bool Opt1, Opt2, Opt3;
        myDialog->GetOptions(Opt1, Opt2, Opt3);
        DoSomethingWithThoseBooleans (Opt1, Opt2, Opt3);
    }

private:
    void DoSomethingWithThoseBooleans (bool Opt1, bool Opt2, bool Opt3);
    Dialog * myDialog;

};

對話:

class Dialog : public QDialog
{
// ...

public:
    void GetOptions (bool & Opt1, bool & Opt2, bool & Opt3)
    {
        Opt1 = ui->checkBox->isChecked();
        Opt2 = ui->checkBox_2->isChecked();
        Opt3 = ui->checkBox_3->isChecked();
    }
};

那看起來很亂。 有更好的設計嗎? 我錯過了什么嗎?

我經常這樣做:

myDialog = new Dialog();
if(myDialog->exec())
{
    bool Opt1, Opt2, Opt3;
    myDialog->GetOptions(Opt1, Opt2, Opt3);
    DoSomethingWithThoseBooleans (Opt1, Opt2, Opt3);
}

這樣很好,但是你也可以看看讓DialogMainWindow上的一個插槽發出一個信號,比如myDialogFinished(bool, bool, bool) ,節省了在完成后就回Dialog

另一種選擇是在完成后將對話框傳遞給存儲數據的位置。 通常,我會在實例化對話框時執行此操作。

class Dialog : public QDialog
{
public:
    Dialog(DialogResult* a_oResult) : m_oResult(a_oResult) {}

signals:
    void accepted()
    {
        DialogResult result;
        // get results into 'result'
        *m_oResult = result;
    }
private:
    DialogResult *m_oResult;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM