[英]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);
}
這樣很好,但是你也可以看看讓Dialog
向MainWindow
上的一個插槽發出一個信號,比如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.