Qt5种标准对话框及使⽤⽅法详解(Dialog )
引⽤⾃: (侵删);
QT 为应⽤程序设计提供了⼀些常⽤的标准对话框,如打开⽂件对话框、选择颜⾊对话框、信息提⽰和确认选择对话框、标准输⼊对话框等,⽤户⽆需再⾃⼰设计这些常⽤的对话框,这样可以减少程序设计⼯作量。
在前⾯⼏章的实例中,或多或少地⽤到了其中的⼀些对话框。Qt 预定义的各标准对话框的类,及其主要静态函数的功能见表 1(由于输⼊参数⼀般较多,省略了函数的输⼊参数,只列出了函数的返回值类型)。
表 1 Qt 预定义标准对话框
对话框
常⽤静态函数名称函数功能QFileDialog
⽂件对话框QString getOpenFileName() QStringList getOpenFileNames()QString getSaveFileName() QString getExistingDirectory()QUrl getOpenFileUrl()选择打开⼀个⽂件 选择打开多个⽂件 选择保存⼀个⽂件 选择⼀个⼰有的⽬录
选择打幵⼀个⽂件,可选择远程⽹络⽂件
QcolorDialog 颜⾊对话框QColor getColor()选择颜⾊
QFontDialog 字体对话框QFont getFont()选择字体
QinputDialog 输⼊对话框QString getText() int getlnt() double getDouble()QString getltem()QString getMultiLineText()
输⼊单⾏⽂字 输⼊整数 输⼊浮点数
从⼀个下拉列表框中选择输⼊ 输⼊多⾏字符串QMessageBox 消息框StandardButton information() StandardButton question()StandardButton waming() StandardButton critical() void about()void aboutQt()信息提⽰对话框 询问并获取是否确认的对话框 警告信息提⽰对话框 错误信息提⽰对话框 设置⾃定义信息的关于对话框 关于Qt 的对话框
实例 samp6_1 演⽰使⽤这些对话框,程序运⾏界⾯如图 2 所⽰。下⽅的⽂本框显⽰打开⽂件的⽂件名或⼀些提⽰信息,某些对话框的输⼊
结果可应⽤于⽂本框的属性设置,如字体和颜⾊。
图 2 实例 samp6_1 运⾏界⾯
QFileDialog 对话框
选择打开⼀个⽂件
若要打开⼀个⽂件,可调⽤静态函数 QFileDialog::getOpenFileName(),“打开⼀个⽂件”按钮的响应代
码如下:
void Dialog::on_btnOpen_clicked()
{ //选择单个⽂件
QString curPath=QDir::currentPath();//获取系统当前⽬录
//获取应⽤程序的路径
QString dlgTitle="选择⼀个⽂件"; //对话框标题
QString filter="⽂本⽂件(*.txt);;图⽚⽂件(*.jpg *.gif *.png);;所有⽂件(*.*)"; //⽂件过滤器
QString aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
if (!aFileName.isEmpty())
ui->plainTextEdit->appendPlainText(aFileName);
}
QFileDialog::getOpenFileName() 函数需要传递 3 个字符串型参数,分别如下:
1. 对话框标题,这⾥设置为"选择⼀个⽂件"。
2. 初始化⽬录,打开对话框时的初始⽬录,这⾥⽤QDinxurrentPath()获取应⽤程序当前⽬录。
3. ⽂件过滤器,设置选择不同后缀的⽂件,可以设置多组⽂件,如:
QString f ilter="⽂本⽂件.txt);;图⽚⽂件(* .jpg *.gif *.png);;所有⽂件(*.*)";
每组⽂件之间⽤两个分号隔开,同⼀组内不同后缀之间⽤空格隔开。
QFileDialog::getOpenFileName() 函数返回的是选择⽂件的带路径的完整⽂件名,如果在对话框⾥取消选择,则返回字符串为空。
选择打开多个⽂件
若要选择打开多个⽂件,可使⽤静态函数 QFileDialog::getOpenFileNames(),“打开多个⽂件”按钮的响应代码如下:
void Dialog::on_btnOpenMulti_clicked()
{ //选择多个⽂件
//获取应⽤程序的路径
QString curPath=QDir::currentPath();//获取系统当前⽬录
QString dlgTitle="选择多个⽂件"; //对话框标题
QString filter="⽂本⽂件(*.txt);;图⽚⽂件(*.jpg *.gif *.png);;所有⽂件(*.*)"; //⽂件过滤器
QStringList fileList=QFileDialog::getOpenFileNames(this,dlgTitle,curPath,filter);
for (int i=0; i&unt();i++)
ui->plainTextEdit->appendPlainText(fileList.at(i));
}
getOpenFileNames() 函数的传递参数与 getOpenFileName() —样,只是返回值是⼀个字符串列表,列表的每⼀⾏是选择的⼀个⽂件。
选择已有⽬录
选择⼰有⽬录可调⽤静态函数 QFileDialog::getExistingDirectory(),同样,若需要传递对话框标题和初始路径,还应传递⼀个选项,⼀般⽤QFileDialog::ShowDirsOnly,表⽰对话框中只显⽰⽬录。
静态函数 QCoreApplication::applicationDirPath() 返回应⽤程序可执⾏⽂件所在的⽬录,getExistingDirectory() 函数的返回值是选择的⽬录名称字符串。
选择保存⽂件名
选择⼀个保存⽂件,使⽤静态函数 QFileDialog::getSaveFileName(),传递的参数与 getOpenFileName() 函数相同。只是在调⽤getSaveFileName() 函数时,若选择的是⼀个⼰经存在的⽂件,会提⽰是否覆盖原有的⽂件。如果提⽰覆盖,会返回为选择的⽂件,但是并不会对⽂件进⾏实质操作,对⽂件的删除操作需要在选择⽂件之后⾃⼰编码实现。
如下⾯的代码,即使选择覆盖⽂件,由于代码⾥没有实质地覆盖原来的⽂件,也不会对选择的⽂件造成任何影响:
void Dialog::on_btnSave_clicked()
{//保存⽂件
QString curPath=QCoreApplication::applicationDirPath(); //获取应⽤程序的路径
QString dlgTitle="保存⽂件"; //对话框标题
QString filter="⽂本⽂件(*.txt);;h⽂件(*.h);;⽂件(.cpp);;所有⽂件(*.*)"; //⽂件过滤器
QString aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);
if (!aFileName.isEmpty())
ui->plainTextEdit->appendPlainText(aFileName);
}
QColorDialog 对话框
QColorDialog 是选择颜⾊对话框,选择颜⾊使⽤静态函数 QColorDialog::getColor()。下⾯是“选择颜⾊”按钮的代码,它为⽂本框的字体选择颜⾊。
void Dialog::on_btnColor_clicked()
{
QPalette pal=ui->plainTextEdit->palette(); //获取现有 palette
QColor  lor(QPalette::Text); //现有的⽂字颜⾊
QColor color=QColorDialog::getColor(iniColor,this,"选择颜⾊");
if (color.isValid()) //选择有效
{
pal.setColor(QPalette::Text,color); //palette 设置选择的颜⾊
ui->plainTextEdit->setPalette(pal); //设置 palette
}
}
getColor() 函数需要传递⼀个初始的颜⾊,这⾥是将palette提取的⽂本颜⾊作为初始颜⾊。getColor() 函数返回⼀个颜⾊变量,若在颜⾊对话框⾥取消选择,则返回的颜⾊值⽆效,通过 QColor::isValid() 函数来判断返回是否有效。
QFontDialog 对话框
QFontDialog 是选择字体对话框,选择字体使⽤静态函数 QFontDialog::getFont()。下⾯是“选择字体”按钮的代码,它为⽂本框选择字体,字体设置的内容包括字体名称、⼤⼩、粗体、斜体等。
void Dialog::on_btnFont_clicked()
{//选择字体
QFont iniFont=ui->plainTextEdit->font(); //获取⽂本框的字体
bool  ok=false;
QFont font=QFontDialog::getFont(&ok,iniFont); //选择字体
if (ok) //选择有效
ui->plainTextEdit->setFont(font);
}
gctFont() 返回⼀个字体变量,但是 QFont 没有类似于 isValid() 的函数来判断有效性,所以在调⽤ getFont() 函数时以引⽤⽅式传递⼀个逻辑变量 ok,调⽤后通过判断 ok 是否为 true 来判断字体选择是
否有效。
QInputDialog标准输⼊对话框
QInputDialog 有单⾏字符串输⼊、整数输⼊、浮点数输⼊、列表框选择输⼊和多⾏⽂本等多种输⼊⽅式,图 3 是其中 4 种界⾯效果。
图 3 QinputDialog 4种输⼊对话框
输⼊⽂字
QInputDialog::getText() 函数显⽰⼀个对话框⽤于输⼊字符串,传递的参数包括对话框标题、提⽰标签⽂字、缺省输⼊、编辑框响应模式等。
其中编辑框响应模式是枚举类型 QLineEdit::EchoMode,它控制编辑框上⽂字的显⽰⽅式,正常情况下选择 QLineEdit::Normal;如果是输⼊密码,选择 QLineEdit::Password。代码如下:
void Dialog::on_btnInputString_clicked()
{ //输⼊字符串
QString dlgTitle="输⼊⽂字对话框";
QString txtLabel="请输⼊⽂件名";
QString defaultInput="新建⽂件.txt";
QLineEdit::EchoMode echoMode=QLineEdit::Normal;//正常⽂字输⼊
//QLineEdit::EchoMode echoMode=QLineEdit::Password;//密码输⼊
bool ok=false;
QString text = QInputDialog::getText(this, dlgTitle,txtLabel, echoMode,defaultInput, &ok);
if (ok && !text.isEmpty())
ui->plainTextEdit->appendPlainText(text);
}
输⼊整数
使⽤ QInputDialog::getInt() 函数输⼊⼀个整数,下⾯的代码为⽂本选择字体⼤⼩:
void Dialog::on_btnInputInt_clicked()
{//输⼊整数
QString dlgTitle="输⼊整数对话框";
QString txtLabel="设置字体⼤⼩";
int defaultValue=ui->plainTextEdit->font().pointSize(); //现有字体⼤⼩
int minValue=6, maxValue=50,stepValue=1; //范围,步长
bool ok=false;
int inputValue = QInputDialog::getInt(this, dlgTitle,txtLabel,
defaultValue, minValue,maxValue,stepValue,&ok);
if (ok) //是否确认输⼊
{
QFont  font=ui->plainTextEdit->font();
font.setPointSize(inputValue);
ui->plainTextEdit->setFont(font);
}
}
输⼊整数对话框使⽤⼀个 SpinBox 组件输⼊整数,getInt() 需要传递的参数包括数值⼤⼩范围、步长、初始值,确认选择输⼊后,将输⼊的整数值作为⽂本框字体的⼤⼩。
输⼊浮点数
使⽤ QInputDialog::getDouble() 函数输⼊⼀个浮点数,输⼊对话框使⽤⼀个 QDoubleSpinBox 作为输⼊组件,getDouble() 的输⼊参数需要输⼊范围、初始值、⼩数点位数等。代码如下:
void Dialog::on_btnInputFloat_clicked()
{ //输⼊浮点数
QString dlgTitle="输⼊浮点数对话框";
QString txtLabel="输⼊⼀个浮点数";
float defaultValue=3.13;
float minValue=0, maxValue=10000;  //范围
int decimals=2;//⼩数点位数
bool ok=false;
float inputValue = QInputDialog::getDouble(this, dlgTitle,txtLabel,
defaultValue, minValue,maxValue,decimals,&ok);
if (ok) //确认选择
{
QString str=QString::asprintf("输⼊了⼀个浮点数:%.2f",inputValue);
ui->plainTextEdit->appendPlainText(str);
}
}
下拉列表选择输⼊
使⽤ QInputDialog::getItem() 可以从⼀个 ComboBox 组件的下拉列表中选择输⼊。代码如下:
void Dialog::on_btnInputItem_clicked()
{ //条⽬选择输⼊
QStringList items; //ComboBox 列表的内容
items <<"优秀"<<"良好"<<"合格"<<"不合格";
QString dlgTitle="条⽬选择对话框";
QString txtLabel="请选择级别";
int    curIndex=0; //初始选择项
bool    editable=true; //ComboBox是否可编辑
bool    ok=false;
QString text = QInputDialog::getItem(this, dlgTitle,txtLabel,items,curIndex,editable,&ok);
if (ok && !text.isEmpty())
ui->plainTextEdit->appendPlainText(text);
}
getItem() 函数需要⼀个 QStringList 变量为其 ComboBox 组件做条⽬初始化,curIndex 指明初始选择项,editable 表⽰对话框⾥的ComboBox是否可编辑,若不能编辑,则只能在下拉列表中选择。
QMessageBox 消息对话框
简单信息提⽰
消息对话框 QMessageBox ⽤于显⽰提⽰、警告、错误等信息,或进⾏确认选择,由⼏个静态函数实现这些功能(详见表 1)。其中warning()、information()、critical() 和 about() 这⼏个函数的输⼊参数和使⽤⽅法相同,只是信息提⽰的图标有区别。
例如,warning() 的函数原型是:
StandardButton QMessageBox::warning(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
其中,parent 是对话框的⽗窗⼝,指定⽗窗⼝之后,打开对话框时,对话框将⾃动显⽰在⽗窗⼝的上⽅中间位置;title 是对话框标题字符串;text 是对话框需要显7K的信息字符串;buttons 是对话框提供的按钮,缺省只有⼀个 OK 按钮;defaultButton 是缺省选择的按钮,缺省表⽰没有选择。
warning() 函数的返回结果是 StandardButton 类型。对话框上显⽰的按钮和缺省选中按钮也是 StandardButton 类型。
StandardButton 是各种按钮的定义,如 OK、Yes、No、Cancel 等,其枚举取值是 QMessageBox::Ok、QMessageBox::Cancel、QMessageBox::Close 等。
详见 Qt 帮助⽂档中的StandardButton 类型的说明。
对于 warning()、information()、critical() 和 about() 这⼏种对话框,它们⼀般只有⼀个 OK 按钮,且⽆须关⼼对话框的返回值。所以,使⽤缺省的按钮设置即可。
图 4 QMessageBox 的⼏种消息提⽰对话框
例如,下⾯是程序中调⽤ QMessageBox 信息显⽰的代码(显⽰的⼏个对话框如图 4 所⽰):
void Dialog::on_btnMsgInformation_clicked()
{
QString dlgTitle="information消息框";
QString strInfo="⽂件已经打开,字体⼤⼩已设置";
QMessageBox::information(this, dlgTitle, strInfo,
QMessageBox::Ok,QMessageBox::NoButton);
}
void Dialog::on_btnMsgWarning_clicked()
{
QString dlgTitle="warning 消息框";
QString strInfo="⽂件内容已经被修改";
QMessageBox::warning(this, dlgTitle, strInfo);
}
void Dialog::on_btnMsgCritical_clicked()
{
QString dlgTitle="critical消息框";字符串函数应用详解
QString strInfo="有不明程序访问⽹络";
QMessageBox::critical(this, dlgTitle, strInfo);
}
void Dialog::on_btnMsgAbout_clicked()
{
QString dlgTitle="about消息框";
QString strInfo="我开发的数据查看软件 V1.0 \n 保留所有版权";
QMessageBox::about(this, dlgTitle, strInfo);
}
确认选择对话框
QMessageBox::question() 函数⽤于打开⼀个选择对话框,提⽰信息,并提供 Yes、No、OK、Cancel 等按钮,⽤户单击某个按钮返回选择,如常见的⽂件保存确认对话框如图 5 所⽰。
图 5 QMessageBox:: question() ⽣成的对话框
静态函数 QMessageBox::question() 的原型如下:
StandardButton QMessageBox::question(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons =

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。