2021.6.7:QT——5种标准对话框、消息框

Qt为应用程序设计提供了一些常用的标准对话框,如文件DLG、颜色DLG、消息框、标准输入DLG、字体DLG,用户无需再自己设计这些常用的对话框,这样可以减少程序设计工作量。

Qt预定义的各种对话框的类以及主要静态函数的功能见下表(由于DLG参数一般较多。所以此处省略了参数,只列出函数的返回类型)

对话框 常用静态函数 功能
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对话框

实例samp6_1演示使用这些对话框,程序运行界面如下图所示。下方的文本框显示打开文件的文件名或一些提示信息,某些对话框的输入结果可应用于文本框的属性设置,如字体和颜色

 

QFileDialog对话框

选择打开一个文件

若要打开一个文件,可以调用静态函数QFileDialog::getOpenFileName(),“打开一个文件”按钮的响应代码如下:

 

void Dialog::on_btnOpen_clicked()
{
    //选择单个文件
    QString curPath = QDir::currentPath();//获取系统当前目录
    //获取应用程序的路径
    QString dlgTitle = "选择一个文件";//对话框标题
    QString filter = "文本文件(*.txt);;图片文件(*.jpg,*.gif,*.png);;所有文件(*.*)";//文件过滤器
    QString filename = QFileDialog :: getOpenFileName(this,dlgTitle,curpath,filter);
    if(!filename.isEmpty())
        ui->plainTextEdit->appendPlainText(filename);

}

 

getOpenFileNames()函数的传递参数与getOpenFileName()一样,只是返回值是一个QStringList,List的每个Item是选择的一个文件。

选择已有目录

选择已有目录可以调用静态函数QFileDialog::getExistingDirectory(),同样,若需要传递TitlePath,还应当传递一个选项,一般用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);;C++文件(.cpp);;所有文件(*.*)"; //文件过滤器
    QString filename = QFileDialog::getSaveFileName(this , dlgTitle , curPath , filter);
    if(!filename.isEmpty())
        ui->plainTextEdit->appendPlainText(filename);
}

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);//palette设置选择颜色
        ui->plainTextEdit->setPalette(pal);//设置palette
    {
}

getColor()函数需要传递一个初始颜色,这里是将palette提取的文本颜色作为初始颜色getColor()函数返回一个QColor变量,若在颜色对话框中取消选择,则返回的颜色值无效,通过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);
}

QInpuDialog标准输入对话框

QInputDialog单行/多行String Text、Int、Float、Item等多种输入方式,下图是其中四种的界面效果:

 输入文字

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);
    }
}

输入整数Dlg使用一个SpinBox组件输入整数,getInt()需要传递的参数包括大小范围、步长、初始值,确认选择输入后,将输入的整数值作为文本框字体的大小。

输入浮点数

使用QInputDialog::getDouble()函数输入一个浮点数,输入Dlg使用一个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,
                                               decimal,&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消息对话框

简单信息提示——Warning

消息对话框QMessageBox用于显示info、warning、error等信息,或者进行确认取消,,由几个静态函数实现这些功能:

QMessageBox

StandardButton information()

StandardButton question()

StandardButton warning()

StandardButton critical()

void about()

void aboutQt()

提示

确认/取消

警告

错误

自定义信息“关于”对话框

关于Qt对话框

其中warning()、information()、critical()、about()这几个函数的参数用法想用,只是信息图标不同。

例如,warning()的函数原型是:

StandardButton QMessageBox :: warning( 
        QWidget * parent , QString title, QString text , 
        StandardButtons buttons = OK , 
        StandardButton defaultButton = NoButton )

其中:

  • parentdlg父窗口;指定父窗口后,打开dlg时,对话框将自动显示在父窗口正上方
  • title:标题
  • text:显示内容
  • buttonsdlg按钮,缺省时只有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信息显示的代码:

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等按钮,用户单击某个按钮返回选择,常见的文件保存对话框如下图所示:

静态函数QMessageBox::question()的原型如下:

StandardButton QMessageBox :: question(QWidget * parent , QString title ,
                                       QString text , 
                                       StandardButton buttons = StandardButton( Yes|No ) ,
                                       StandardButton defaultButton = NoButton )

question()对话框的关键是在其中选择显示多个按钮,例如同时显示Yes、No、OK、Cancel,其返回结果也是一个StandardButton类型变量,表示哪个按钮被单击了。

下面是产生如上图所示对话框的代码,并根据对话框选择结果进行了判断和显示:

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消息框:无选择");
}

 总结

1、文件对话框QFileDialog,可以通过对话框的方式,快速选择一个文件,基本用法流程:

QString curPath = QDir :: currentPath(); //当前目录的路径
QString title = "选择一个文件";//对话框标题
QString filter = "文本文件(*.txt);;图片文件(*.jpg,*.gif,*.png);;所有文件(*.*)";//文件类型过滤器
QString filename = QFileDialog :: getOpenFileName(this , title , curPath , filter);

其中第四行是就是通过前三行的参数打开一个文件对话框选择文件。

还可以用getOpenFileNames()选择一些文件,返回一个QStringListList中的每个Item都是一个文件名。

还可以通过getSaveFileName()选择一个保存文件(即想要在之后在这个文件中存东西)。

2、颜色对话框QColorDialog,字体对话框QFontDialog

3、标准输入对话框QInputDialog:可以以对话框的形式输入String、Int、Float、Item等:

用法主要是:

QString title = "dialog title";
QString label = "说明性文字";
bool ok = false;

//不同输入时处理不同
//①String:getText()
QString defaulttext = "default text";
QLineEdit :: EchoMode echoMode = QLineEdit::Normal;//设置输入模式,这里是正常文字输入
QLineEdit :: EchoMode echoMode = QLineEdit::Password;//密码模式
QString text = QInputDialog::getText(this,title,label,echoMode,defaulttext,&ok);

//②int:getInt(),输入时用到了SpinBox组件
int defaultValue = 6;
int minValue=3 , maxValue=50 , stepValue=1;//范围和步长
int inputValue = QInputDialog::getInt(this,title,label,defaultValue,minValue,maxValue,stepValue,&ok);

//③float:getDouble(),用到了DoubleSpinBox组件
float defaultValue = 3.13;
float minValue=0,maxValue=10000;
int decimal=2;//小数点位数
float inputValue = QInputDialog::getDouble(this,title,label,defaultValue,minValue,maxValue,decimal,&ok);

//④item:getItem():从ComboBox提供的下拉列表中选择输入
QStringList items;//combobox列表内容
items<<"优秀"<<"良好"<<"合格"<<"不合格";
int curIndex=0;//初始项
bool editable=true;//combobox是否可编辑
bool ok=false;
QString text = QInputDialog::getItem(this,title,label,items,curIndex,editable,&ok);

 

posted @ 2021-06-14 20:04  ShineLe  阅读(20)  评论(0编辑  收藏  举报