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消息框: 无选择");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值