類是對話窗口的基類。
對話窗口是一個頂層窗口,主要用于與用戶進行簡短交互,如果設置了父窗口,其顯示的位置會在父窗口的中心。
2.4.1 模態對話框
模態對話框可以在相同的應用程序中阻止對其他可見窗口的輸入。
當應用程序的模態對話框打開時,用戶必須完成與對話框的交互,并在訪問應用程序的任何其他窗口之前關閉它。
2.4.1.1 模態對話框的兩種方式2.4.1.2 顯示模態對話框2.4.2 非模態對話框
非模態對話框是獨立于同一應用程序中的其他窗口運行的對話框。在文字處理器中查找并替換對話框就是典型的非模態對話框。
非模態對話框使用show()顯示,它立即將控制權返回給調用者。
如果在隱藏對話框后再調用show()函數,對話框將顯示在原來的位置。
2.4.3 模態對話框示例
新建GUI項目,類名,基類選擇。
在生成的ui文件中添加如下控件
main.cpp
#include
#include
#include
#include "modelwidget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
ModelWidget w;
w.show();
//非模態對話框
QDialog modelLessDlg;
modelLessDlg.setWindowTitle("非模態對話框");
modelLessDlg.show();
modelLessDlg.resize(200, 100);
qDebug() << "顯示完非模態對話框后,不需要等用戶操作就會立馬執行我";
return a.exec();
}
.h
class ModelWidget : public QWidget
{
Q_OBJECT
public:
explicit ModelWidget(QWidget *parent = 0);
~ModelWidget();
private slots:
void on_btnWindow_clicked();
void on_btnApp_clicked();
void on_btnCustom_clicked();
private:
Ui::ModelWidget *ui;
};
.cpp
#include
#include
#include "modelwidget.h"
#include "ui_modelwidget.h"
#include "customdialog.h"
ModelWidget::ModelWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::ModelWidget)
{
ui->setupUi(this);
}
ModelWidget::~ModelWidget()
{
delete ui;
}
//彈出窗口模態對話框
void ModelWidget::on_btnWindow_clicked()
{
QDialog* dlg = new QDialog(this);
dlg->setAttribute(Qt::WA_DeleteOnClose);//設置對話框關閉后,自動銷毀
dlg->setWindowModality(Qt::WindowModal);
dlg->show();
qDebug() << "雖然顯示模態對話框,但我不需要等用戶操作完就會立馬執行";
}
//彈出應用模態對話框
void ModelWidget::on_btnApp_clicked()
{
QDialog* dlg = new QDialog(this);
dlg->setAttribute(Qt::WA_DeleteOnClose);//設置對話框關閉后,自動銷毀
dlg->setWindowModality(Qt::ApplicationModal);//或者可以使用setModel(true)
dlg->show();
qDebug() << "雖然顯示模態對話框,但我也不需要等用戶操作完就會立馬執行";
}
//自定義對話框
void ModelWidget::on_btnCustom_clicked()
{
CustomDialog* dlg = new CustomDialog(this);
dlg->setAttribute(Qt::WA_DeleteOnClose);//設置對話框關閉后,自動銷毀
int ret = dlg->exec();
if (ret == QDialog::Accepted)
{
ui->lineEdit->setText("你點擊了OK按鈕");
}
else if (ret == QDialog::Rejected)
{
ui->lineEdit->setText("你點擊了Cancle按鈕");
}
}
再添加一個自定義對話框類
右鍵點擊項目=》添加新文件=》QT=》Qt設計師界面類=》 =》下一步=》類名=》完成
在ui界面,拖入兩個按鈕,點擊編輯信號槽按鈕(快捷鍵F4),如下圖
鼠標點擊按鈕,按鈕變紅,拖動鼠標到ui界面上,并彈出信號槽編輯對話框,選擇信號和槽模態對話框是什么時候實例的對話框,同理,編輯按鈕,最后變成下圖的樣子??梢渣c擊信號槽編輯按鈕左側的編輯窗口按鈕(F3鍵),回到編輯窗口模式。
.h
#ifndef CUSTOMDIALOG_H
#define CUSTOMDIALOG_H
#include
namespace Ui {
class CustomDialog;
}
class CustomDialog : public QDialog
{
Q_OBJECT
public:
explicit CustomDialog(QWidget *parent = 0);
~CustomDialog();
private:
Ui::CustomDialog *ui;
};
#endif // CUSTOMDIALOG_H
.cpp
#include "customdialog.h"
#include "ui_customdialog.h"
CustomDialog::CustomDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::CustomDialog)
{
ui->setupUi(this);
}
CustomDialog::~CustomDialog()
{
delete ui;
}
編譯并運行程序。
1.點擊彈出窗口模態對話框,那么你無法點擊它的父窗口,但可以點擊非模態對話框。
2.關閉窗口模態對話框,那么其他窗口就都可以點擊了。
3.打開應用模態對話框,那么所有的其他窗口都無法再點擊。
4.關閉應用模態對話框模態對話框是什么時候實例的對話框,打開自定義對話框,分別點擊OK,和關閉按鈕,查看的內容。
好的,關于模態對話框的內容我們就講到這里,如果你想第一時間看到小豆君的技術分享,就趕快關注吧。