对话框类的使用QFileDialog、QColorDialog、QFontDialog、QProgressDialog、QInputDialog、QMessageBox
对话框类 | 主要静态函数 | 函数功能 |
QFileDialog | QString getOpenFileName() QStringList getOpenFileNames() QString getSaveFileName() QString getExistingDirectory() QUrl getOpenFileUrl() |
选择打开一个文件,返回选择文件的文件名 选择打开多个文件, 返回选择的所有文件的文件名列表 选择保存一个文件,返回保存文件的文件名 选择一个已有的目录,返回所选目录的完整路径 选择打开一个文件,可选择打开远程网络文件 |
void saveFileContent() | 将一个 QByteArray 类型的字节数据数组的内容保存为文件 | |
QColorDialog | QColor getColor() | 显示选择颜色对话框用于选择颜色,返回值是选择的 |
QFontDialog | QFont getFont() | 显示选择字体对话框,返回值是选择的字体 |
QProgressDialog | — | 显示进度变化的对话框,没有静态函数 |
QInputDialog | QString getText() |
显示标准输入对话框,输入单行文字 |
int getInt() | 显示标准输入对话框,输入整数 | |
double getDouble() | 显示标准输入对话框,输入浮点数 | |
QString getItem() | 显示标准输入对话框,从一个下拉列表框中选择输入 | |
QString getMultiLineText() | 显示标准输入对话框,输入多行字符串 | |
QMessageBox | StandardButton information() | 显示信息提示对话框 |
StandardButton question() | 显示询问并获取是否确认的对话框 | |
StandardButton warning() | 显示警告信息提示对话框 | |
StandardButton critical() | 显示错误信息提示对话框 | |
void about() | 显示设置自定义信息的关于对话框 | |
void aboutQt() | 显示关于 Qt 的对话框 | |
QPrintDialog | — | 打印机设置对话框,没有静态函数 |
QPrintPreviewDialog | — | 打印预览对话框,没有静态函数 |
布局
StandardDialogExample.h
#ifndef STANDARDDIALOGEXAMPLE_H
#define STANDARDDIALOGEXAMPLE_H
#include <QDialog>
namespace Ui {
class StandardDialogExample;
}
class StandardDialogExample : public QDialog
{
Q_OBJECT
public:
explicit StandardDialogExample(QWidget *parent = nullptr);
~StandardDialogExample();
private slots:
void do_progress_canceled();
void on_btnOpen_clicked();
void on_btnOpenMulti_clicked();
void on_bntSelDir_clicked();
void on_btnSave_clicked();
void on_btnColor_clicked();
void on_btnFont_clicked();
void on_btnProgress_clicked();
void on_btnMsgQuestion_clicked();
void on_btnMsgInformation_clicked();
void on_btnInputString_clicked();
void on_btnInputInt_clicked();
void on_btnInputFloat_clicked();
void on_btnInputItem_clicked();
void on_btnClearText_clicked();
void on_btnMsgWarning_clicked();
void on_btnMsgCritical_clicked();
void on_btnMsgAbout_clicked();
void on_btnMsgAboutQt_clicked();
private:
Ui::StandardDialogExample *ui;
};
#endif // STANDARDDIALOGEXAMPLE_H
StandardDialogExample.cpp
#include "standarddialogexample.h"
#include "ui_standarddialogexample.h"
#include <QDir>
#include <QFileDialog>
#include <QColorDialog>
#include <QPalette>
#include <QFont>
#include <QFontDialog>
#include <QInputDialog>
#include <QMessageBox>
#include <QProgressDialog>
#include <QElapsedTimer>
StandardDialogExample::StandardDialogExample(QWidget *parent)
: QDialog(parent)
, ui(new Ui::StandardDialogExample)
{
ui->setupUi(this);
}
StandardDialogExample::~StandardDialogExample()
{
delete ui;
}
void StandardDialogExample::do_progress_canceled()
{
ui->plainTextEdit->appendPlainText("进度对话被取消了");
}
void StandardDialogExample::on_btnOpen_clicked()
{//选择单个文件
//获取系统当前目录
QString curPath =QDir::currentPath();
//获取应用程序的运行路径
//QCoreApplication::applicationDirPath();
QString dlgTitle ="选择一个文件";
QString filter ="文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)";
QString fileName=QFileDialog::getOpenFileName(this,
dlgTitle,
curPath,
filter);
if(!fileName.isEmpty())
ui->plainTextEdit->appendPlainText(fileName);
}
void StandardDialogExample::on_btnOpenMulti_clicked()
{
//获取系统当前目录
QString curPath =QDir::currentPath();
//获取应用程序的运行路径
//QCoreApplication::applicationDirPath();
QString dlgTitle ="选择一个文件";
QString filter ="文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)";
QStringList fileList=QFileDialog::getOpenFileNames(this,
dlgTitle,
curPath,
filter);
for(int i=0;i<fileList.size();i++)
ui->plainTextEdit->appendPlainText(fileList.at(i));
}
void StandardDialogExample::on_bntSelDir_clicked()
{
QString curPath= QCoreApplication::applicationDirPath();
QString title ="请选择一个目录";
QString selectedDir = QFileDialog::getExistingDirectory(this,title,curPath);
if(!selectedDir.isEmpty())
ui->plainTextEdit->appendPlainText(selectedDir);
}
void StandardDialogExample::on_btnSave_clicked()
{
QString curPath = QCoreApplication::applicationDirPath();
QString title ="保存文件";
QString filter ="文本文件(*.txt);;h文件(*.h);;C++文件(*.cpp);所有文件(*.*)";
QString fileName = QFileDialog::getSaveFileName(this,title,curPath,filter);
if(!fileName.isEmpty())
ui->plainTextEdit->appendPlainText(fileName);
}
void StandardDialogExample::on_btnColor_clicked()
{
QPalette palet = ui->plainTextEdit->palette();
QColor iniColor = palet.color(QPalette::Text);
QColor color = QColorDialog::getColor(iniColor,this,"选择颜色");
if(color.isValid())
{
palet.setColor(QPalette::Text,color);
ui->plainTextEdit->setPalette(palet);
}
}
void StandardDialogExample::on_btnFont_clicked()
{
QFont iniFont =ui->plainTextEdit->font();
bool ok= false;
QFont font = QFontDialog::getFont(&ok,iniFont);
if(ok)
ui->plainTextEdit->setFont(font);
}
void StandardDialogExample::on_btnMsgQuestion_clicked()
{
QString title ="Question消息框";
QString strInfo ="文件已被修改,是否保存?";
QMessageBox::StandardButton defaultBtn = QMessageBox::NoButton;//缺省按钮
QMessageBox::StandardButton ret;
ret = QMessageBox::question(this,title,strInfo,
QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,defaultBtn);
QString printText;
switch(ret)
{
case QMessageBox::Yes:
printText="Question消息框:Yes被选择";
break;
case QMessageBox::No:
printText="Question消息框:No被选择";
break;
case QMessageBox::Cancel:
printText="Question消息框:Cancel被选择";
break;
default:
printText="无选择";
}
ui->plainTextEdit->appendPlainText(printText);
}
void StandardDialogExample::on_btnMsgInformation_clicked()
{
QString title ="Information消息框";
QString strInfo ="已完成操作";
QMessageBox::information(this,title,strInfo,
QMessageBox::Ok|QMessageBox::NoButton);
}
void StandardDialogExample::on_btnMsgWarning_clicked()
{
QString title ="警告";
QString strInfo ="可能有问题";
QMessageBox::warning(this,title,strInfo,
QMessageBox::Ok|QMessageBox::NoButton);
}
void StandardDialogExample::on_btnMsgCritical_clicked()
{
QString title ="错误";
QString strInfo ="发生错误";
QMessageBox::critical(this,title,strInfo,
QMessageBox::Ok|QMessageBox::NoButton);
}
void StandardDialogExample::on_btnMsgAbout_clicked()
{
QString title ="about消息框";
QString strInfo ="XX 软件V1.0 \nDesigned by cat";
QMessageBox::about(this,title,strInfo);
}
void StandardDialogExample::on_btnMsgAboutQt_clicked()
{
QString title ="aboutQt消息框";
QMessageBox::aboutQt(this,title);
}
void StandardDialogExample::on_btnProgress_clicked()
{
QString labTxt = "正在复制文件...";
QString btnTxt = "取消";
int minValue =0,maxValue =200;
QProgressDialog dlgProgress(labTxt,btnTxt,minValue,maxValue,this);
connect(&dlgProgress,SIGNAL(canceled()),this,SLOT(do_progress_canceled()));
dlgProgress.setWindowTitle("复制文件");
dlgProgress.setWindowModality(Qt::WindowModal);
dlgProgress.setAutoReset(true);
dlgProgress.setAutoClose(true);
QElapsedTimer msCounter;
for(int i=minValue;i<maxValue;i++)
{
dlgProgress.setValue(i);
dlgProgress.setLabelText(QString::asprintf("正在复制文件,第%d个",i));
msCounter.start();
while(true)
{
if(msCounter.elapsed()>30)//使用 QElapsedTimer 停顿 30ms
break;
}
if(dlgProgress.wasCanceled())
break;
}
}
void StandardDialogExample::on_btnInputString_clicked()
{
QString title ="输入文字对话框";
QString txtLabel ="请输入文件名";
QString iniInput ="新建文本文件.txt";
QLineEdit::EchoMode echoMode = QLineEdit::Normal;
bool ok = false;
QString retTxt = QInputDialog::getText(this,title,txtLabel,echoMode,iniInput,&ok);
if(ok&& !retTxt.isEmpty())
ui->plainTextEdit->appendPlainText(retTxt);
}
void StandardDialogExample::on_btnInputInt_clicked()
{
QString title ="输入整数对话框";
QString txtLabel ="设置文本框字体大小";
int defaultValue = ui->plainTextEdit->font().pointSize();
int minValue =6,maxValue=50,stepValue=1;
bool ok = false;
int inputValue= QInputDialog::getInt(this,title,txtLabel,defaultValue,minValue,maxValue,stepValue,&ok);
if(ok)
{
ui->plainTextEdit->appendPlainText(QString("字体大小被设置为:%1").arg(inputValue));
QFont font = ui->plainTextEdit->font();
font.setPointSize(inputValue);
ui->plainTextEdit->setFont(font);
}
}
void StandardDialogExample::on_btnInputFloat_clicked()
{
QString title ="输入浮点数对话框";
QString txtLabel ="输入一个浮点数";
float defaultValue = 6.18;
float minValue =0,maxValue=10000;
bool ok = false;
int decimals =2;
float inputValue= QInputDialog::getDouble(this,title,txtLabel,defaultValue,minValue,maxValue,decimals,&ok);
if(ok)
{
ui->plainTextEdit->appendPlainText(QString::asprintf("输入了一个浮点数:%.2f",inputValue));
}
}
void StandardDialogExample::on_btnInputItem_clicked()
{
QStringList items;
items<<"优秀"<<"良好"<<"合格"<<"不合格";
QString title ="请选择条目";
QString txtLabel="请选择级别";
int curIndex =0;
bool editable = true;
bool ok = false;
QString retTxt = QInputDialog::getItem(this,title,txtLabel,items,curIndex,editable,&ok);
if(ok&& !retTxt.isEmpty())
ui->plainTextEdit->appendPlainText(retTxt);
}
void StandardDialogExample::on_btnClearText_clicked()
{
ui->plainTextEdit->clear();
}
效果