2016-05-07 82 views
2

如何從QDialog返回自定義值?這是documented它分別返回QDialog返回值,僅接受還是拒絕?

QDialog::Accepted 1 
QDialog::Rejected 0 

如果用戶按CancelOk

我想在一個自定義對話框呈現,即三個複選框,以允許用戶選擇一些選項。 QDialog適合這個嗎?

回答

3

你會在2個功能感興趣:

通常,在QDialog的「確定」按鈕連接到QDialog::accept()插槽。你想避免這種情況。相反,寫自己的處理程序設置返回值:

// Custom dialog's constructor 
MyDialog::MyDialog(QWidget *parent = nullptr) : QDialog(parent) 
{ 
    // Initialize member variable widgets 
    m_okButton = new QPushButton("OK", this); 
    m_checkBox1 = new QCheckBox("Option 1", this); 
    m_checkBox2 = new QCheckBox("Option 2", this); 
    m_checkBox3 = new QCheckBox("Option 3", this); 

    // Connect your "OK" button to your custom signal handler 
    connect(m_okButton, &QPushButton::clicked, [=] 
    { 
     int result = 0; 
     if (m_checkBox1->isChecked()) { 
      // Update result 
     } 

     // Test other checkboxes and update the result accordingly 
     // ... 

     // The following line closes the dialog and sets its return value 
     this->done(result);    
    }); 

    // ... 
} 
+0

這將是很好基於問題三個複選框有一個例子... – KcFnMi

+0

@KcFnMi完成,顯示出'了QDialog ::進行()' :) – JKSH

+2

儘管這是可能的,但我通常只是通過getters讓複選框值可訪問,並在exec()返回Accepted時調用它們。這導致代碼更少,並且往往更具可讀性。 –