對話框是 GUI 程序中不可或缺的組成部分。一些不適合在主窗口實現(xiàn)的功能組件都必須放在對話框中設(shè)置。對話框通常會是一個頂層窗口,出現(xiàn)在程序最上層,用于實現(xiàn)短期任務(wù)或者簡潔的用戶交互。所謂標準對話框,是 Qt 內(nèi)置的一系列對話框,用于簡化開發(fā)。事實上,有很多對話框都是通用的,比如打開文件、設(shè)置顏色、打印設(shè)置等。這些對話框在所有程序中幾乎相同。
Qt常用的內(nèi)置對話框有QFileDialog、QColorDialog、QFontDialog、QInputDialog和QMessageBox。下面對這些對話框做一些簡單示例。
對話框類 |
說明 |
靜態(tài)函數(shù) |
函數(shù)說明 |
QFileDialog |
文件對話框 |
getOpenFileName() |
選擇打開一個文件 |
getOpenFileNames() |
?選擇打開多個文件 |
||
getSaveFileName() |
選擇保存一個文件 |
||
getExistingDirectory() |
選擇一個己有的目錄 |
||
getOpenFileUrl() |
選擇打幵一個文件,可選擇遠程網(wǎng)絡(luò)文件 |
||
QColorDialog |
顏色對話框 |
getColor() |
選擇顏色 |
QFontDialog |
字體對話框 |
QFont getFont() |
選擇字體 |
QInputDialog |
輸入對話框 |
getText() |
輸入單行文字 ? |
getlnt() |
輸入整數(shù) |
||
getDouble() |
輸入浮點數(shù) |
||
getltem() |
從一個下拉列表框中選擇輸入 |
||
getMultiLineText() |
輸入多行字符串 |
||
QMessageBox |
消息框 |
information() |
信息提示對話框 |
question() |
詢問并獲取是否確認的對話框 |
||
waming() |
警告信息提示對話框 |
||
critical() |
錯誤信息提示對話框 |
||
about() |
設(shè)置自定義信息的關(guān)于對話框 |
||
aboutQt() |
關(guān)于Qt的對話框 |
QFileDialog文件對話框?
文件對話框可以通過調(diào)用QFileDialog::getOpenFileName方法實現(xiàn),方法的第一個參數(shù)指定窗體的父窗體、第二個參數(shù)指定窗體的標題、第三個參數(shù)指定窗體的打開目錄、第四個參數(shù)用于限定打開的文件類型,有多個類型時中間用;;隔開。下面程序演示了當用戶點擊按鈕后會彈出文件對話框,之后將用戶選擇的文件路勁顯示在文本框中。
//文件對話框
void Dialog::ShowFileDlg()
{
//打開文件對話框
//函數(shù)返回打開的路徑
QString sPath = QFileDialog::getOpenFileName(
this,//指定父窗口
"標準文件對話框",//打開文件對話框的標題
".",//打開目錄,"." 表示當前目錄
"C++ files(*.cpp);;"
"C files(*.c);;"
"Header files(*.h)"http://設(shè)置文件過濾器,有多個條件時中間以兩個;;隔開
);
m_fileEdit->setText(sPath);
}
m_fileEdit是一個QLineEdit部件名,用來顯示用戶打開文件的路徑。?
?QColorDialog顏色對話框
顏色對話框可以通過調(diào)用QColorDialog::getColor方法實現(xiàn),方法的第一個參數(shù)表示默認選擇的顏色。該方法會返回一個顏色類。
void Dialog::ShowColorDlg()
{
QColor color = QColorDialog::getColor(
Qt::yellow//默認選擇的顏色
);
//判斷顏色選擇是否合法
if(color.isValid()){
//設(shè)置邊寬顏色
m_colorFrame->setPalette(QPalette(color));
}
}
?m_colorFram是一個QFrame類型,用來展示用戶選擇的顏色
QFontDialog字體對話框
字體對話框可以通過調(diào)用QFontDialog::getFont方法實現(xiàn),該方法需要傳入一個bool類型的參數(shù)用來接收函數(shù)是否成功執(zhí)行,方法會返回一個字體字體類。
//字體對話框
void Dialog::ShowFontDlg()
{
bool ok;//接收函數(shù)是否執(zhí)行成功
QFont font = QFontDialog::getFont(
&ok//接收函數(shù)是否執(zhí)行成功
);
if(ok){
//設(shè)置字體
m_fontEdit->setFont(font);
}
}
?m_fontEdit是一個QLineEdit類型,用來展示用戶選擇的字體效果
QInputDialog輸入對話框
設(shè)置姓名,可以調(diào)用的是QInputDialog::getText( )方法用來獲取輸入的單行文本。方法的第一個參數(shù)指定父窗體,第二個參數(shù)指定對話框的標題,第三個參數(shù)指定對話框顯示的內(nèi)容,第四個參數(shù)紙檔輸入框的模式,第五個參數(shù)指定默認值,第六個參數(shù)是一個bool類型用來接收函數(shù)是否執(zhí)行成功。
//文本輸入對話框
void InputDlg::editName(){
bool ok;
QString strName = QInputDialog::getText(
this,//指定父窗體
"標準文本輸入對話框",//指定對話框標題
"請編輯姓名",//提示字符串
QLineEdit::Normal,//輸入框顯示模式
m_nameLabel->text(),//輸入框的默認文本
&ok//接收函數(shù)調(diào)用是否成功
//最后一個參數(shù)表示窗體風格,這里采用默認的
);
if(ok && !strName.isEmpty()){
m_nameLabel->setText(strName);
}
}
設(shè)置性別,可以調(diào)用的是QInputDialog::getItem( ) 方法用來獲取用戶從下拉列表選擇的值。QInputDialog第三個參數(shù)用來設(shè)置下拉列表框,要傳入一個QStringList類型的值。
//條目輸入對話框
void InputDlg::editSex(){
QStringList sexList;
bool ok;
sexList<<"男"<<"女"<<"未知";
//可選項是QString 類型,接收也是QString
QString strSex = QInputDialog::getItem(
this,
"標準條目輸入對話框",//指定對話框標題
"請選擇性別", //指定顯示內(nèi)容
sexList,//設(shè)置可選項,可選項是一個QStringList類型
0,//設(shè)置默認選選項
false,//是否可編輯
&ok//接收函數(shù)是否調(diào)用成功
);
if(ok && !strSex.isEmpty()){
m_sexLabel->setText(strSex);
}
}
設(shè)置年齡,可以調(diào)用QInputDialog::getInt方法用來獲取用戶填入的整數(shù)值。getInt方法的第四個參數(shù)和第五個參數(shù)分別用來設(shè)置整數(shù)的最小值和最大值,第六個參數(shù)用來設(shè)置步長,即點擊增加按鈕時每次增加的值。
void InputDlg::editAge(){
bool ok;
int age = QInputDialog::getInt(
this,
"標注int數(shù)據(jù)類型輸入對話框",//對話框標題
"請編輯年齡",//對話框顯示的內(nèi)容
m_ageLabel->text().toInt(),//默認值
0,//最小值
120,//最大值
1,//步長
&ok//接收函數(shù)是否調(diào)用成功
);
if(ok){
m_ageLabel->setText(QString("%1").arg(age));
}
}
設(shè)置分數(shù),可以調(diào)用QInputDialog::getDouble方法用來獲取用戶填入的浮點數(shù)值。getDouble方法的第四個參數(shù)和第五個參數(shù)分別用來設(shè)置整數(shù)的最小值和最大值,第六個參數(shù)用來設(shè)置精度,即點數(shù)據(jù)的小數(shù)位。
void InputDlg::editScore(){
bool ok;
double score = QInputDialog::getDouble(
this,//設(shè)置父窗體
"標準double數(shù)據(jù)類型輸入對話框",//對話框標題
"請編輯分數(shù)",//對話框顯示的內(nèi)容
m_scoreLabel->text().toDouble(),//默認值
0,//最小值
100,//最大值
1,//精度
&ok//接收函數(shù)是否執(zhí)行成功
);
if(ok){
m_scoreLabel->setText(QString::number(score));
}
}
QMessageBox消息框
問題消息框,可以調(diào)用QMessageBox::question() 顯示問題消息框,問題消息框可設(shè)置要顯示的按鈕,方法會返回一個枚舉類型表示用戶所點擊的按鈕。這里設(shè)置的是“確定”和“取消”按鈕。
void MsgBoxDlg::showQuestionMsgDlg() {
m_tipLabel->setText("問題消息框");
int res = QMessageBox::question(
this,//指定父窗體
"問題消息框",//指定標題
"已打開問題消息框,是否關(guān)閉?",//顯示的文本
QMessageBox::Ok|QMessageBox::Cancel,//標注按鈕
QMessageBox::Ok//默認選擇的按鈕
);
switch (res) {
case QMessageBox::Ok:
m_tipLabel->setText("問題消息框 - 確定");
break;
case QMessageBox::Cancel:
m_tipLabel->setText("問題消息框 - 取消");
break;
default:
break;
}
}
信息消息框,可以調(diào)用QMessageBox::information( )方法實現(xiàn),信息消息框的作用是給用戶展示一段消息,無需用戶做出操作,函數(shù)參數(shù)也比較簡單。
void MsgBoxDlg::showInformationMsgDlg() {
m_tipLabel->setText("信息消息框");
QMessageBox::information(
this,//父窗體
"信息提示框",//標題
"這是個信息提示框"http://文本內(nèi)容
);
}
警告消息框,可以調(diào)用QMessageBox::waring方法,警告消息框同樣可以設(shè)置消息框的按鈕,方法會一個枚舉類型表示用戶的操作。這里設(shè)置的是“保存”、“忽視”和“取消”按鈕。
void MsgBoxDlg::showWarningMsgDlg() {
m_tipLabel->setText("警告消息框");
int res = QMessageBox::warning(
this,//父窗體
"警告消息框",//標題
"有為保存的文件",//警告內(nèi)容
QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,
QMessageBox::Save//默認選擇的按鈕
);
switch (res) {
case QMessageBox::Save:
m_tipLabel->setText("警告提示框 - 保存");
break;
case QMessageBox::Discard:
m_tipLabel->setText("警告提示框 - 忽視");
break;
case QMessageBox::Cancel:
m_tipLabel->setText("警告提示框 - 取消");
break;
default:
break;
}
}
錯誤消息框,可以調(diào)用QMessageBox::critical方法,錯誤消息框也相當于一種消息提醒,會比信息消息框的效果顯目,調(diào)用方法和信息消息框類似。
void MsgBoxDlg::showCriticalMsgDlg() {
m_tipLabel->setText("錯誤消息框");
QMessageBox::critical(
this,//父窗體
"錯誤消息框",//標題
"發(fā)生重大錯誤??!"http://顯示內(nèi)容
);
}
關(guān)于消息框,調(diào)用QMessageBox::about方法,關(guān)于消息框也是一種消息提醒,調(diào)用方法與信息消息框類似。
void MsgBoxDlg::showAboutMsgDlg() {
m_tipLabel->setText("關(guān)于消息框");
QMessageBox::about(
this,//父窗體
"關(guān)于消息框",//標題
"這是個關(guān)于休斯頓的信息"http://顯示內(nèi)容
);
}
關(guān)于QT消息框,調(diào)用QMessageBox::aboutQt方法,關(guān)于QT消息框會彈出一個有關(guān)QT的信息。其他功能暫無。
void MsgBoxDlg::showAboutQtMsgDlg() {
m_tipLabel->setText("關(guān)于QT消息框");
QMessageBox::aboutQt(
this,//父窗體
"關(guān)于QT消息框"http://標題
);
}
自定義消息框
自定義消息框設(shè)置了一個圖標和三個按鈕,其中兩個按鈕采用自定義形式,另一個按鈕采用標準形式,當用戶點擊按鈕后,從對話框中獲取用戶點擊的按鈕,然后顯示出對應(yīng)的文本。
文章來源:http://www.zghlxwxcb.cn/news/detail-418978.html
//自定義消息框
void Dialog::ShowCustomDlg() {
m_customLabel->setText("自定義消息框");
QMessageBox customMsgBox;
customMsgBox.setWindowTitle("自定義消息框");
//返回一個按鈕對象
//自定義按鈕
QPushButton *yes = customMsgBox.addButton(
"真的嗎?",//指定文本
QMessageBox::ActionRole//指定角色
);
//自定義按鈕
QPushButton *no = customMsgBox.addButton(
"假的",//指定文本
QMessageBox::ActionRole//指定角色
);
//標準按鈕
QPushButton *cancel = customMsgBox.addButton(
QMessageBox::Cancel);
//設(shè)置圖標
customMsgBox.setIconPixmap(QPixmap("msg.jpg"));
customMsgBox.exec();
if(customMsgBox.clickedButton()==yes){
m_customLabel->setText("點了“真的嗎?”");
}else if(customMsgBox.clickedButton()==no){
m_customLabel->setText("點了“假的 ”");
}else if(customMsgBox.clickedButton()==cancel){
m_customLabel->setText("點了“取消”");
}
}
?追風趕月莫停留,平蕪盡處是春山?。。?/strong>文章來源地址http://www.zghlxwxcb.cn/news/detail-418978.html
到了這里,關(guān)于QT—5種標準對話框使用詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!