對話框窗口部件 QDialog
對話框(Dialog)是計算機圖形用戶界面(GUI)中的一種常見窗口類型,通常用于與用戶進行交互、獲取信息、提供反饋或執(zhí)行特定任務。對話框的主要目的是與用戶進行短期的、有限的交互,以完成特定的操作或任務,然后將控制返回給應用程序的主窗口或上下文。
模態(tài)與非模態(tài)對話框
按照運行對話框時是否還可以和該程序的其他窗口進行交互,對話框常被分為兩類:模態(tài)(model)和非模態(tài)(modeless)。
模態(tài)對話框(model dialog)
模態(tài)對話框阻塞了應用程序的主窗口或其他父窗口,直到用戶完成對話框中的操作或關閉對話框。用戶必須在對話框上完成交互后才能繼續(xù)與應用程序交互。典型的模態(tài)對話框包括文件選擇框、消息框、設置對話框等。
方法 1:exec()
QDialog dlg();
dlg.exec();
此方法實現(xiàn)的為全模態(tài)對話框,不僅會阻塞應用程序窗口,當調(diào)用 exec() 函數(shù)時,代碼將不會繼續(xù)向下執(zhí)行,只有當對話框關閉才會返回。
方法 2:setModel()
QDialog dlg();
dlg.setModel(true);
dlg.show();
此方法實現(xiàn)的為半模態(tài)對話框,只會阻塞應用程序窗口,代碼仍然繼續(xù)向下執(zhí)行。
方法 3:setWindowModality()
QDialog dlg();
dlg.setWindowModality(Qt::ApplicationModal);
dlg.show();
使用此方法實現(xiàn)的模態(tài)對話框也是半模態(tài)的。
setWindowModality()的參數(shù)設置要阻塞的窗口類型:
枚舉值 | 值 | 說明 |
---|---|---|
Qt::NonModal | 0 | 非模態(tài),不阻塞任何窗口 |
Qt::WindowModal | 1 | 模態(tài),阻塞它的父窗口,所有的祖先窗口以及他們的子窗口 |
Qt::NonModal | 2 | 模態(tài),阻塞應用程序所有的窗口 |
非模態(tài)對話框(modeless dialog)
非模態(tài)對話框與應用程序的其他部分同時存在,用戶可以在對話框和主窗口之間自由切換。用戶可以同時打開多個非模態(tài)對話框,而不必等待一個對話框完成才能處理其他任務。典型的非模態(tài)對話框包括查找和替換對話框。
QDialog dlg();
dlg.show();
標準對話框
Qt 提供了一些常用的對話框類型,它們?nèi)坷^承自 QDialog 類,并增加了自己的特色功能,例如顏色、文件、字體、輸入、提示、進度對話框等。此處只列舉顏色、文件對話框和消息對話框,其余留給你自己練習!
顏色對話框
顏色對話框類 QColorDialog 提供了一個可以獲取指定顏色的對話框部件。
#include <QColorDialog>
QColor color = QColorDialog::getColor(Qt::red, nullptr, QObject::tr("顏色對話框"));
qDebug() << "color" << color;
QColorDialog::getColor 的 3 個參數(shù)分別是:設置初始顏色、指定父窗口和設置對話框標題。
運行結果如圖:
其實 QColorDialog::getColor 函數(shù)聲明是這樣的:
QColor
getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions())
聰明的你可能已經(jīng)發(fā)現(xiàn)了,這不是 4 個參數(shù)嗎?咱咋沒用呢?
options 是指定影響顏色對話框外觀的各種選項,QColorDialog::ColorDialogOption 具體見下表:
枚舉值 | 值 | 說明 |
---|---|---|
QColorDialog::ShowAlphaChannel | 1 | 允許用戶選擇顏色的alpha組件 |
QColorDialog::NoButtons | 2 | 不顯示“確定”和“取消”按鈕。(對于”live dialog”很有用。) |
QColorDialog::DontUseNativeDialog | 4 | 使用Qt的標準顏色對話框,而不是操作系統(tǒng)的本機顏色對話框 |
接下來我們使用 QColorDialog::ShowAlphaChannel 來顯示 alpha 設置。運行程序查看結果如圖所示:
文件對話框
文件對話框 QFileDialog 類提供了一個允許用戶選擇文件或文件夾的對話框。
#include <QFileDialog>
QString fileName = QFileDialog::getOpenFileName(nullptr, QObject::tr("Open File"), "D:\\", QObject::tr("文本文檔(*.txt)"));
qDebug() << "fileName:" << fileName;
QFileDialog::getOpenFileName 的 4 個參數(shù)的作用分別是:指定父窗口、設置對話框標題、指定默認打開目錄路徑和設置文件類型過濾器。
運行結果如圖:
其實 QFileDialog::getOpenFileName 函數(shù)聲明是這樣的:
QString QFileDialog::getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
selectedFilter 用于存儲用戶選擇的過濾器的名稱,可以設置默認選擇哪種過濾器。
options 用于指定對話框的選項。詳見 QFileDialog::Options 枚舉。
注意:getOpenFileName() 只能選擇單一文件,要同時選擇多個文件,則可以使用 getOpenFileNames() 函數(shù)。
消息對話框
消息對話框 QMessageBox 類提供了一個模態(tài)的對話框來通知用戶一些信息,或者向用戶提出一個問題并且獲取答案。
// 提示對話框
int ret = QMessageBox::information(nullptr, QObject::tr("提示"), QObject::tr("這是一個提示對話框"), QMessageBox::Ok);
if (ret == QMessageBox::Ok)
qDebug() << QObject::tr("提示");
// 警告對話框
int ret2 = QMessageBox::warning(nullptr, QObject::tr("警告"), QObject::tr("這是一個警告對話框"), QMessageBox::Abort);
if (ret2 == QMessageBox::Abort)
qDebug() << QObject::tr("警告");
// 錯誤對話框
int ret3 = QMessageBox::critical(nullptr, QObject::tr("錯誤"), QObject::tr("這是一個錯誤對話框"), QMessageBox::YesAll);
if (ret3 == QMessageBox::YesAll)
qDebug() << QObject::tr("錯誤");
// 關于對話框
QMessageBox::about(nullptr, QObject::tr("關于"), QObject::tr("這里是bmseven的博客"));
// 提問對話框,帶有Yes和No按鈕
QMessageBox::StandardButton reply;
reply = QMessageBox::question(nullptr, QObject::tr("提問"), QObject::tr("你確定要執(zhí)行此操作嗎?"),
QMessageBox::Yes | QMessageBox::No);
if (reply == QMessageBox::Yes) {
qDebug() << QObject::tr("用戶選擇了Yes。");
} else {
qDebug() << QObject::tr("用戶選擇了No。");
}
運行結果如圖:
這里創(chuàng)建了 5 個不同類型的消息對話框,分別擁有不同的圖標和提示音(這個是操作系統(tǒng)設置的),幾個參數(shù)分別用于設置父窗口、標題欄、顯示信息和擁有的按鈕。文章來源:http://www.zghlxwxcb.cn/news/detail-666659.html
這里使用的都是 QMessageBox 類提供的標準按鈕。返回值也都是 QMessageBox::StandardButton 枚舉類型的值,唯獨關于對話框 about() 函數(shù)沒有返回值,因為它默認只有一個按鈕。文章來源地址http://www.zghlxwxcb.cn/news/detail-666659.html
到了這里,關于第三篇:對話框窗口部件 QDialog的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!