学习《QT5.9 c++ 开发指南》第6章 标准对话框

第六章中,主要讲述一些常见的标准对话框,主要讲述以下5个对话框的使用:

QFileDialog 文件对话框
QcolorDialog 颜色对话框 
QFontDialog 字体对话框
QInputDialg 输入对话框
QMessageBox 消息框

 

创建项目,基于QDialog创建,项目的构建ui 与界面布局这里不多讲,直接上图:

对应布局名称:

下面让我们开始吧

QFileDialog  对话框:  (点击右键,转到槽,别说你忘了⊙︿⊙)

要使用 QFileDialog   在xx.cpp加入   

#include    <QFileDialog>

对应的槽函数为:

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

  首先,dlgTitle 是设置了对话框的标题,curPath 是设置了初始化目录,filter 是文件过滤;

  通过  getOpenFileName 返回完整路径,当没有选中文件时候,返回为空字符。最后加载到页面上。

 打开多个文件:

void Dialog::on_btnOpenMulti_clicked()
{
    //选择多个文件
    //  QString curPath=QCoreApplication::applicationDirPath(); //获取应用程序的路径
        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<fileList.count();i++)
            ui->plainTextEdit->appendPlainText(fileList.at(i));
}

选择已有目录:

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

}

通过使用  QFileDialog::getExistingDirectory 函数显示文件所在的目录。

选择保存文件名字:

void Dialog::on_btnSave_clicked()
{
    QString curPath=QCoreApplication::applicationDirPath(); //获取应用程序的路径
    QString dlgTitle="保存文件"; //对话框标题
    QString filter="文本文件(*.txt);;h文件(*.h);;C++文件(.cpp);;所有文件(*.*)"; //文件过滤器
    QString aFileName = QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);
    if (!aFileName.isEmpty())
        ui->plainTextEdit->appendPlainText(aFileName);
}

 通过使用  QFileDialog::getSaveFileName对文件存储。

QcolorDialog  颜色对话框:

要对颜色进行设置要添加一下头文件:

#include    <QColorDialog>
#include    <QPalette>
#include    <QFont>

选择颜色 对应的槽函数为:

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

通过 QColorDialog::getColor 来获取选择的颜色,然后返回到Color 中,然后设置对应的颜色。

QFontDialog 字体对话框的使用:

同样先添加对应的头文件:

#include    <QFontDialog>

选择字体对应的槽函数为:

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

QInputDialg  输入对话框的使用

同样先添加对应的头文件:

#include    <QInputDialog>

输入字符串对应的槽函数:

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

同理输入整数,浮点数,下拉列表对应的槽函数:

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

    }
}


void Dialog::on_btnInputFloat_clicked()
{
    //输入浮点数
    QString dlgTitle="输入浮点数对话框";
    QString txtLabel="输入一个浮点数";
    double defaultValue=3.13;
    double minValue=0, maxValue=10000;  //范围
    int decimals=2;//小数点位数

    bool ok=false;
    double inputValue = QInputDialog::getDouble(this,dlgTitle,txtLabel,
                                               defaultValue, minValue,maxValue,decimals,&ok);
    if (ok) //确认选择
    {
        QString str=QString::asprintf("输入了一个浮点数:%.2f",inputValue);
        ui->plainTextEdit->appendPlainText(str);
    }
}

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

QMessageBox 消息对话框

这个对话框相信大家都不陌生了,用于显示提示,警告,错误等信息,或者确认选择.

话不多说代码供上,先添加对应的头文件:

#include    <QMessageBox>
#include    <QProgressDialog>

下面六个消息对话框,都比较简单,大家比较下他们的差距:

void Dialog::on_btnMsgInformation_clicked()
{
    QString dlgTitle="information消息框";
    QString strInfo="文件已经打开,字体大小已设置";
    //    QMessageBox::information(this, dlgTitle, strInfo);//使用缺省的按钮

       QMessageBox::information(this, dlgTitle, strInfo,
                                  QMessageBox::Ok,QMessageBox::NoButton);
}

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

void Dialog::on_btnMsgWarning_clicked()
{

    QString dlgTitle="warning 消息框";
    QString strInfo="文件内容已经被修改";

    QMessageBox::warning(this, dlgTitle, strInfo);
//    QMessageBox::warning(this, dlgTitle, strInfo, QMessageBox::Ok,QMessageBox::NoButton);
}

void Dialog::on_btnMsgCritical_clicked()
{
    QString dlgTitle="critical消息框";
    QString strInfo="有不明程序访问网络";
    QMessageBox::critical(this, dlgTitle, strInfo);
//    QMessageBox::critical(this, dlgTitle, strInfo, QMessageBox::Ok,QMessageBox::NoButton);
}

void Dialog::on_btnMsgAbout_clicked()
{
    QString dlgTitle="about消息框";
    QString strInfo="我开发的数据查看软件 V1.0 \n 保留所有版权";

    QMessageBox::about(this, dlgTitle, strInfo);
}

void Dialog::on_btnMsgAboutQt_clicked()
{
    QString dlgTitle="aboutQt消息框";
    QMessageBox::aboutQt(this, dlgTitle);
}

最后,添加清除文本槽函数:

void Dialog::on_btnClearText_clicked()
{
    ui->plainTextEdit->clear();
}

下面是运行出来的效果:

程序的功能这里就不多显示了,请大家自己去品味,代码程序传送门:

本程序的例子

希望大家多点点赞,你的赞,对我来说很重要。

发布了8 篇原创文章 · 获赞 2 · 访问量 272

猜你喜欢

转载自blog.csdn.net/weixin_42126427/article/details/104017868