目錄
5. 對話框
5.1 對話框介紹
用例1:
用例2:
用例3:
用例4:
5.2 對話框的分類
5.2.1 模態對話框
5.2.2 ?模態對話框
5. 對話框
5.1 對話框介紹
對話框是 GUI 程序中不可或缺的組成部分。?些不適合在主窗?實現的功能組件可以設置在對話框 中。對話框通常是?個頂層窗?,出現在程序最上層,?于實現短期任務或者簡潔的??交互。Qt常 ?的內置對話框有:QFiledialog(?件對話框)、QColorDialog(顏?對話框)、QFontDialog (字體對話框)、QInputDialog (輸?對話框)和 QMessageBox(消息框) 。
用例1:

直接運行

用例2:


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{QDialog* dialog = new QDialog(this);dialog->setWindowTitle("對話框的標題");// 設置對話框的尺寸dialog->resize(400, 300);// 通過 show 方法就可以顯示出對話框.dialog->show();// delete dialog;// 正確做法應該是把 delete 和關閉按鈕的點擊信號關聯起來.// 在用戶點擊關閉的時候, 觸發 delete.// Qt 為了讓咱們寫的方便, 直接給 QDialog 設置了一個屬性, 可以通過設置屬性, 完成上述效果.dialog->setAttribute(Qt::WA_DeleteOnClose);
}

要是這樣寫,一點擊對話框就會閃退,因為在函數內創建對話框又刪除對話框
用例3:










dialog.h
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "dialog.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{Dialog* dialog = new Dialog(this);dialog->setWindowTitle("自定義對話框");dialog->resize(400, 300);dialog->setAttribute(Qt::WA_DeleteOnClose);dialog->show();
}
dialog.cpp
#include "dialog.h"
#include <QPushButton>
#include <QLabel>
#include <QVBoxLayout>Dialog::Dialog(QWidget* parent) : QDialog(parent)
{// 創建出一些控件, 加入到 Dialog 中. (以 Dialog 作為父窗口)QVBoxLayout* layout = new QVBoxLayout();this->setLayout(layout);QLabel* label = new QLabel("這是一個對話框", this);QPushButton* button = new QPushButton("關閉", this);layout->addWidget(label);layout->addWidget(button);connect(button, &QPushButton::clicked, this, &Dialog::handle);
}void Dialog::handle()
{this->close();
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "dialog.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{Dialog* dialog = new Dialog(this);dialog->setWindowTitle("自定義對話框");dialog->resize(400, 300);dialog->setAttribute(Qt::WA_DeleteOnClose);dialog->show();
}
用例4:
創建窗口項目
mianwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "dialog.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{// 彈出一個自定義的對話框了Dialog* dialog = new Dialog(this);dialog->setAttribute(Qt::WA_DeleteOnClose);// dialog->show();dialog->exec();
}
5.2 對話框的分類
對話框分為 模態對話框 和 ?模態對話框。
?
?
5.2.1 模態對話框
模態對話框指的是:顯?后?法與?窗?進?交互,是?種阻塞式的對話框。使? QDialog::exec() 函 數 調?。
模態對話框適?于必須依賴??選擇的場合,?如消息顯?,?件選擇,打印設置等。
?例:
1、新建 Qt 項?,在 ui ?件中的菜單欄中設置兩個菜單:"?件" 和 "編輯",在 菜單 "?件" 下新建
菜單項:"創建" 并將菜單項 "新建" 置于?具欄中 ; 如下圖?

2、在 mainwindow.cpp ?件中實現:當點擊 "新建" 時,彈出?個模態對話框;
說明:在菜單項中,點擊菜單項時就會觸發 triggered() 信號

5.2.2 ?模態對話框
?模態對話框顯?后獨?存在,可以同時與?窗?進?交互,是?種?阻塞式對話框,使?
QDialog::show()函數調?。
?模態對話框?般在堆上創建,這是因為如果創建在棧上時,彈出的?模態對話框就會?閃?過。同 時還需要設置 Qt:WA_DeleteOnClose 屬性,?的是:當創建多個?模態對話框時(如打開了多個? 模態窗?),為了避免內存泄漏要設置此屬性。
?模態對話框適?于特殊功能設置的場合,?如查找操作,屬性設置等。
?例:

5.2.3 混合屬性對話框
混合屬性對話框同時具有模態對話框和?模態對話框的屬性,對話框的?成和銷毀具有?模態對話框 屬性,功能上具有模態對話框的屬性。
使? QDialog::setModal() 函數 可以創建混合特性的對話框。通常,創建對話框時需要指定對話框的 ?組件。
?例:
