天天看點

Qt入門(對話框)

簡介

  1. Qt 支援模态對話框和非模态對話框。其中,Qt 有兩種級别的模态對話框:應用程式級别的模态和視窗級别的模态,預設是應用程式級别的模态。應用程式級别的模态是指,當該種模态的對話框出現時,使用者必須首先對對話框進行互動,直到關閉對話框,然後才能通路程式中其他的視窗。視窗級别的模态是指,該模态僅僅阻塞與對話框關聯的視窗,但是依然允許使用者與程式中其它視窗互動。
  2. QDialog::exec()實作應用程式級别的模态對話框,使用QDialog::open()實作視窗級别的模态對話框,使用QDialog::show()實作非模态對話框。
  3. setAttribute()函數設定對話框關閉時,自動銷毀對話框。執行個體:

    dialog->setAttribute(Qt::WA_DeleteOnClose);

  4. QDialog::exec()是有傳回值的,其傳回值是QDialog::Accepted(确定)或者QDialog::Rejected(取消)

資料傳遞

  1. 模态對話框通過

    dialog.result()

    //此時不能設定WA_DeleteOnClose(關閉時銷毀)屬性
  2. 非模态對話框在關閉時可以調用QDialog::accept()或者QDialog::reject()或者更通用的QDialog::done()函數,是以我們可以在這裡發出信号。
//!!! Qt 5
// in dialog:
void UserAgeDialog::accept()
{
    emit userAgeChanged(newAge); // newAge is an int
    QDialog::accept();
}

// in main window:
void MainWindow::showUserAgeDialog()
{
    UserAgeDialog *dialog = new UserAgeDialog(this);
    connect(dialog, &UserAgeDialog::userAgeChanged, this, &MainWindow::setUserAge);
    dialog->show();
}

// ...

void MainWindow::setUserAge(int age)
{
    userAge = age;
}
           

标準對話框 QMessageBox

  1. Qt入門(對話框)
  2. Qt入門(對話框)
  3. 使用QMessageBox的屬性設定 API
QMessageBox msgBox;
msgBox.setText(tr("The document has been modified."));
msgBox.setInformativeText(tr("Do you want to save your changes?"));
msgBox.setDetailedText(tr("Differences here..."));
msgBox.setStandardButtons(QMessageBox::Save
                          | QMessageBox::Discard
                          | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Save:
    qDebug() << "Save document!";
    break;
case QMessageBox::Discard:
    qDebug() << "Discard changes!";
    break;
case QMessageBox::Cancel:
    qDebug() << "Close document!";
    break;
} 
           
  1. 我們不能在函數指針中使用函數參數的預設值。這是 C++ 語言的限制:參數預設值隻能使用在直接地函數調用中。當使用函數指針取其位址的時候,預設參數是不可見的