在Qt中對話框分為兩種形式,一種是標準對話框,另一種則是自定義對話框,在一般開發(fā)過程中標準對話框使用是最多的了,標準對話框一般包括 QMessageBox,QInputDialog,QFileDialog 這幾種,這里我將總結(jié)本人在開發(fā)過程中常用到的標準對話框的使用技巧。
成都創(chuàng)新互聯(lián)是專業(yè)的坡頭網(wǎng)站建設(shè)公司,坡頭接單;提供成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行坡頭網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
Qt框架下,常用的標準對話框有下面這幾種:
QMessageBox 消息彈窗: 消息對話框用于提示用戶,常見的有四種分別是:提示,警告,錯誤,確認,代碼歸納如下所示。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
// By : LyShark
// https://www.cnblogs.com/lyshark
// 彈出各種MessageBox
void MainWindow::on_pushButton_clicked()
{
QString dlgTitle="消息框";
QString strInfo="文件已被修改,是否保存修改 ?";
QMessageBox::StandardButton defaultBtn = QMessageBox::NoButton; // 缺省按鈕
QMessageBox::StandardButton result; // 返回選擇的按鈕
// 彈窗分類 Question information warning critical
result=QMessageBox::question(this, dlgTitle, strInfo,QMessageBox::Yes|QMessageBox::No |QMessageBox::Cancel,defaultBtn);
if (result==QMessageBox::Yes)
ui->plainTextEdit->appendPlainText("Question消息框: Yes 被選擇");
else if(result==QMessageBox::No)
ui->plainTextEdit->appendPlainText("Question消息框: No 被選擇");
else if(result==QMessageBox::Cancel)
ui->plainTextEdit->appendPlainText("Question消息框: Cancel 被選擇");
else
ui->plainTextEdit->appendPlainText("Question消息框: 無選擇");
}
// 彈出關(guān)于提示
void MainWindow::on_pushButton_2_clicked()
{
QString dlgTitle="about 消息框";
QString strInfo="我開發(fā)的數(shù)據(jù)查看軟件 V1.0 \n 保留所有版權(quán)";
QMessageBox::about(this, dlgTitle, strInfo);
}
QMessageBox 退出事件: 彈窗組件還可以配合QCloseEvent實現(xiàn)事件通知機制,例如當窗體被關(guān)閉則提示用戶是否關(guān)閉窗體。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
// 窗口關(guān)閉時詢問是否退出
void MainWindow::closeEvent(QCloseEvent *event)
{
QMessageBox::StandardButton result=QMessageBox::question(this, "確認", "確定要退出本程序嗎?",
QMessageBox::Yes|QMessageBox::No |QMessageBox::Cancel,
QMessageBox::No);
if (result==QMessageBox::Yes)
event->accept();
else
event->ignore();
}
// By : LyShark
// https://www.cnblogs.com/lyshark
MainWindow::~MainWindow()
{
delete ui;
}
QInputDialog 對話框: 該對話框長用于輸入一段特殊的文本,浮點數(shù),或者選擇一個列表框中的選項,該功能用于簡單的用戶交互場景。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
// 文本輸入對話框
void MainWindow::on_pushButton_clicked()
{
QString dlgTitle="輸入文字對話框";
QString txtLabel="請輸入文件名";
QString defaultInput="新建文件.txt";
QLineEdit::EchoMode echoMode=QLineEdit::Normal; // 正常文字輸入
// QLineEdit::EchoMode echoMode=QLineEdit::Password; // 密碼輸入
bool flag = false;
QString text = QInputDialog::getText(this, dlgTitle,txtLabel, echoMode,defaultInput, &flag);
if (flag && !text.isEmpty())
{
ui->plainTextEdit->appendPlainText(text);
}
}
// 整數(shù)數(shù)值輸入對話框
// By : LyShark
// https://www.cnblogs.com/lyshark
void MainWindow::on_pushButton_2_clicked()
{
QString dlgTitle="輸入整數(shù)對話框";
QString txtLabel="設(shè)置字體大小";
int defaultValue=ui->plainTextEdit->font().pointSize(); // 現(xiàn)有字體大小
int minValue=6, maxValue=50, stepValue=1; // 范圍(步長)
bool flag=false;
int inputValue = QInputDialog::getInt(this, dlgTitle,txtLabel,defaultValue, minValue,maxValue,stepValue,&flag);
if (flag)
{
QFont font=ui->plainTextEdit->font();
font.setPointSize(inputValue);
ui->plainTextEdit->setFont(font);
}
}
// 浮點數(shù)輸入對話框
void MainWindow::on_pushButton_3_clicked()
{
QString dlgTitle="輸入浮點數(shù)對話框";
QString txtLabel="輸入一個浮點數(shù)";
float defaultValue=3.13;
float minValue=0, maxValue=; // 范圍
int decimals=2; // 小數(shù)點位數(shù)
bool flag=false;
float inputValue = QInputDialog::getDouble(this, dlgTitle,txtLabel,defaultValue, minValue,maxValue,decimals,&flag);
if (flag)
{
QString str=QString::asprintf("輸入了一個浮點數(shù):%.2f",inputValue);
ui->plainTextEdit->appendPlainText(str);
}
}
// 單選框條目選擇對話框
void MainWindow::on_pushButton_4_clicked()
{
QStringList items; // 列表內(nèi)容
items <<"優(yōu)秀"<<"良好"<<"合格"<<"不合格"; // 放入列表
QString dlgTitle="條目選擇對話框";
QString txtLabel="請選擇級別";
int curIndex=0; //初始選擇項
bool editable=false; // 是否可編輯
bool flag=false;
QString text = QInputDialog::getItem(this, dlgTitle,txtLabel,items,curIndex,editable,&flag);
if (flag && !text.isEmpty())
{
ui->plainTextEdit->appendPlainText(text);
}
}
QFileDialog 對話框: 該對話框用于對文本的操作,例如打開文件,保存文件,選擇文件夾等,當點擊選擇后,對話框會自動提取出文件路徑。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
// 選擇單個文件對話框
void MainWindow::on_pushButton_clicked()
{
QString curPath=QDir::currentPath(); // 獲取系統(tǒng)當前目錄
// QString curPath=QCoreApplication::applicationDirPath(); // 獲取應(yīng)用程序的路徑
QString dlgTitle="選擇一個文件"; // 對話框標題
QString filter="文本文件(*.txt);;圖片文件(*.jpg *.gif *.png);;所有文件(*.*)"; // 文件過濾器
QString aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
if (!aFileName.isEmpty())
{
ui->plainTextEdit->appendPlainText(aFileName);
}
}
// 選擇多個文件對話框
// By : LyShark
// https://www.cnblogs.com/lyshark
void MainWindow::on_pushButton_2_clicked()
{
// QString curPath=QCoreApplication::applicationDirPath(); // 獲取應(yīng)用程序的路徑
QString curPath=QDir::currentPath(); // 獲取系統(tǒng)當前目錄
QString dlgTitle="選擇多個文件"; // 對話框標題
QString filter="文本文件(*.txt);;圖片文件(*.jpg *.gif *.png);;所有文件(*.*)"; // 文件過濾器
QStringList fileList=QFileDialog::getOpenFileNames(this,dlgTitle,curPath,filter);
for (int i=0; iplainTextEdit->appendPlainText(fileList.at(i));
}
}
// 選擇文件夾
void MainWindow::on_pushButton_3_clicked()
{
QString curPath=QCoreApplication::applicationDirPath(); // 獲取應(yīng)用程序的路徑
// QString curPath=QDir::currentPath(); // 獲取系統(tǒng)當前目錄
// 調(diào)用打開文件對話框打開一個文件
QString dlgTitle="選擇一個目錄"; // 對話框標題
QString selectedDir=QFileDialog::getExistingDirectory(this,dlgTitle,curPath,QFileDialog::ShowDirsOnly);
if (!selectedDir.isEmpty())
{
ui->plainTextEdit->appendPlainText(selectedDir);
}
}
// 保存文件對話框
void MainWindow::on_pushButton_4_clicked()
{
QString curPath=QCoreApplication::applicationDirPath(); // 獲取應(yīng)用程序的路徑
QString dlgTitle="保存文件"; // 對話框標題
QString filter="文本文件(*.txt);;h文件(*.h);;C++文件(.cpp);;所有文件(*.*)"; // 文件過濾器
QString aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);
if (!aFileName.isEmpty())
{
ui->plainTextEdit->appendPlainText(aFileName);
}
}