Qt的对话框与窗口--标准的对话框
标准的对话框
表1 Qt预定义标准对话框
对话框 | 常用静态函数名称 | 函数功能 |
---|---|---|
QFileDialog文件对话框 | QString getOpenFileName() | 选择打开一个文件 |
QStringList getOpenFileNames() | 选择打开多个文件 | |
QString getSaveFileName() | 选择保存一个文件 | |
QString getExistingDirectory() | 选择一个已有的目录 | |
QUrl getOpenFileUrl() | 选择打开一个文件,可选择远程网络文件 | |
QcolorDialog颜色对话框 | QColor getColor() | 选择颜色 |
QFontDialog字体对话框 | QFont getFont() | 选择字体 |
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的对话框 |
QFileDialog对话框
1.选择打开一个文件
若要打开一个文件,可调用静态函数QFileDialog::getOpenFileName(),“打开一个文件”按钮的响应代码如下:
void Dialog::on_btnOpen_clicked()
{ //选择单个文件
QString curPath=QDir::currentPath();//获取应用程序当前目录
QString dlgTitle="选择一个文件";
QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif);;所有文件(*.*)";
QString aFileName=QFileDialog::getOpenFileName(this,
dlgTitle, curPath, filter);
if (!aFileName.isEmpty())
ui->plainTextEdit->appendPlainText(aFileName);
}
QFileDialog::getOpenFileName()函数需要传递3个字符串型参数,分别如下。
对话框标题,这里设置为"选择一个文件"。
初始化目录,打开对话框时的初始目录,这里用QDir::currentPath() 获取应用程序当前目录。
文件过滤器,设置选择不同后缀的文件,可以设置多组文件,如:
QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)";
每组文件之间用两个分号隔开,同一组内不同后缀之间用空格隔开。
QFileDialog ::getOpenFileName()函数返回的是选择文件的带路径的完整文件名,如果在对话框里取消选择,则返回字符串为空。
2.选择打开多个文件
若要选择打开多个文件,可使用静态函数QFileDialog::getOpenFileNames(),“打开多个文件”按钮的响应代码如下:
void Dialog::on_btnOpenMulti_clicked()
{ //选择多个文件
QString curPath=QDir::currentPath();
QString dlgTitle="选择多个文件";
QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif);;所有文件(*.*)";
QStringList fileList=QFileDialog::getOpenFileNames(this,
dlgTitle,curPath,filter);
for (int i=0; i<fileList.count();i++)
ui->plainTextEdit->appendPlainText(fileList.at(i));
}
getOpenFileNames()函数的传递参数与getOpenFileName()一样,只是返回值是一个字符串列表,列表的每一行是选择的一个文件。
3.选择已有目录
选择已有目录可调用静态函数QFileDialog::getExistingDirectory(),同样,若需要传递对话框标题和初始路径,还应传递一个选项,一般用QFileDialog::ShowDirsOnly,表示对话框中只显示目录。
void Dialog::on_btnSelDir_clicked()
{ //选择文件夹
QString curPath=QCoreApplication::applicationDirPath();
QString dlgTitle="选择一个目录";
QString selectedDir=QFileDialog::getExistingDirectory(this,
dlgTitle,curPath, QFileDialog::ShowDirsOnly);
if (!selectedDir.isEmpty())
ui->plainTextEdit->appendPlainText(selectedDir);
}
静态函数QCoreApplication::applicationDirPath()返回应用程序可执行文件所在的目录,getExistingDirectory()函数的返回值是选择的目录名称字符串。
4.选择保存文件名
选择一个保存文件,使用静态函数QFileDialog::getSaveFileName(),传递的参数与getOpenFile Name()函数相同。只是在调用getSaveFileName()函数时,若选择的是一个已经存在的文件,会提示是否覆盖原有的文件。如果提示覆盖,会返回为选择的文件,但是并不会对文件进行实质操作,对文件的删除操作需要在选择文件之后自己编码实现。如下面的代码,即使选择覆盖文件,由于代码里没有实质地覆盖原来的文件,也不会对选择的文件造成任何影响。
void Dialog::on_btnSave_clicked()
{//保存文件
QString curPath=QCoreApplication::applicationDirPath();
QString dlgTitle="保存文件";
QString filter="h文件(*.h);;C++文件(.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 iniColor=pal.color(QPalette::Text); //现有的文字颜色
QColor color=QColorDialog::getColor(iniColor,this,"选择颜色");
if (color.isValid())
{
pal.setColor(QPalette::Text,color);
ui->plainTextEdit->setPalette(pal);
}
}
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);
}
getFont()返回一个字体变量,但是QFont没有类似于isValid()的函数来判断有效性,所以在调用getFont()函数时以引用方式传递一个逻辑变量ok,调用后通过判断ok是否为true来判断字体选择是否有效。
QInputDialog标准输入对话框
QInputDialog有单行字符串输入、整数输入、浮点数输入、列表框选择输入和多行文本等多种输入方式。
1.输入文字
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);
}
2.输入整数
使用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()需要传递的参数包括数值大小范围、步长、初始值,确认选择输入后,将输入的整数值作为文本框字体的大小。
3.输入浮点数
使用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);
}
}
4.下拉列表选择输入
使用QInputDialog::getItem()可以从一个ComboBox组件的下拉列表中选择输入。代码如下:
void Dialog::on_btnInputItem_clicked()
{ //条目选择输入
QStringList items;
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消息对话框
1.简单信息提示
消息对话框QMessageBox用于显示提示、警告、错误等信息,或进行确认选择,由几个静态函数实现这些功能。其中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是对话框需要显示的信息字符串;buttons是对话框提供的按钮,缺省只有一个OK按钮;defaultButton是缺省选择的按钮,缺省表示没有选择。
warning()函数的返回结果是StandardButton类型。对话框上显示的按钮和缺省选中按钮也是StandardButton类型。
StandardButton是各种按钮的定义,如OK、Yes、No、Cancel等,其枚举取值是QMessageBox::Ok、QMessageBox::Cancel、QMessageBox::Close等,详见Qt帮助文档中的StandardButton类型的说明。
对于warning()、information()、critical()和about()这几种对话框,它们一般只有一个OK按钮,且无须关心对话框的返回值。所以,使用缺省的按钮设置即可。
void Dialog::on_btnMsgInformation_clicked()
{//information
QString dlgTitle="information消息框";
QString strInfo="文件已经打开,字体大小已设置";
QMessageBox::information(this, dlgTitle, strInfo,
QMessageBox::Ok,QMessageBox::NoButton);
}
void Dialog::on_btnMsgWarning_clicked()
{// warning
QString dlgTitle="warning 消息框";
QString strInfo="文件内容已经被修改";
QMessageBox::warning(this, dlgTitle, strInfo);
}
void Dialog::on_btnMsgCritical_clicked()
{// critical
QString dlgTitle="critical消息框";
QString strInfo="有不明程序访问网络";
QMessageBox::critical(this, dlgTitle, strInfo);
}
void Dialog::on_btnMsgAbout_clicked()
{// about
QString dlgTitle="about消息框";
QString strInfo="我开发的数据查看软件 V1.0 \n 保留所有版权";
QMessageBox::about(this, dlgTitle, strInfo);
}
2.确认选择对话框
QMessageBox::question()函数用于打开一个选择对话框,提示信息,并提供Yes、No、OK、Cancel等按钮,用户单击某个按钮返回选择,如常见的文件保存确认对话框。
静态函数QMessageBox::question()的原型如下:
StandardButton QMessageBox::question(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = StandardButtons( Yes | No ), StandardButton defaultButton = NoButton)
question()对话框的关键是在其中可以选择显示多个按钮,例如同时显示Yes、No、OK或Cancel。其返回结果也是一个StandardButton 类型变量,表示哪个按钮被单击了。下面是产生如图6-4所示对话框的代码,并根据对话框选择结果进行了判断和显示。
void Dialog::on_btnMsgQuestion_clicked()
{
QString dlgTitle="Question消息框";
QString strInfo="文件已被修改,是否保存修改?";
QMessageBox::StandardButton defaultBtn=QMessageBox::NoButton;
QMessageBox::StandardButton result;//返回选择的按钮
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消息框: 无选择");
}