2016-05-07 15 views
2

QDialogからカスタム値を返す方法は?それはそれは、ユーザーのプレスOkCancelの場合は、それぞれ QDialogの戻り値、AcceptedまたはRejectedのみ?

QDialog::Accepted 1 
QDialog::Rejected 0 

を返し documentedです。

私は、ユーザーがいくつかのオプションを選択できるようにする3つのチェックボックスを提示するカスタムダイアログを考えています。 QDialogはこれに適していますか?

答えて

3

あなたは2つの機能に興味があるでしょう:

通常、QDialogで「OK」ボタンをQDialog::accept()スロットに接続されている:

  • QDialog::done()は、ダイアログを閉じて、あなたが指定した結果を返すQDialog::exec()作ることを除いて、同じことを行います。あなたはこれを避けたいです。代わりに、戻り値を設定するために独自のハンドラ記述:

    // 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

    を 'QDialogを示す、@KcFnMiが完了 – KcFnMi

    +0

    ...質問3つのチェックボックスに基づいた例があると便利でしょう::済()' :) – JKSH

    +2

    これは可能ですが、私は通常、getterを使ってチェックボックスの値をアクセス可能にし、exec()がAcceptedを返すときに呼び出すだけです。その結果、コードが少なくなり、読みやすくなる傾向があります。 –

    関連する問題