QT学习笔记7(Qt对话框)

一、Qt对话框基本知识

1、QDialog是Qt所有对话框窗口的基类,继承于QWidget是一种容器类型的器件

2、对话框有模态、非模态两种情况

模态对话框:

  • 对于参数选择的对话框,一般用模态对话框;
  • 显示后不能够和父窗口进行交互
  • 是一种阻塞式对话框调用

 模态对话框通过调用exec()函数实现,使用模态对话框时,事件就在对话框内部循环,必须将对话框关闭才能继续执行主界面的操作。非模态对话框调用show()函数实现

非模态:

  • 对于显示或查看某些内容的对话框,一般用非模态对话框。
  • 显示后独立存在可以同时与父窗口进行交互
  • 非阻塞式对话框调用

3、Qt 为应用程序设计提供了一些常用的标准对话框,如打开文件对话框、选择颜色对话框、信息提示和确认选择对话框、标准输入对话框等,用户无需再自己设计这些常用的对话框,这样可以减少程序设计工作量

 

二、五种标准对话框的使用方法

1、创建工程,安照如下设计测试界面

其中文本框使用如下,并命名为plainTextEdit

2、编写每个按钮对应的槽函数

编写之前,.cpp文件首先添加五个标准对话框所对应的头文件

#include "QFileDialog"
#include "QColorDialog"
#include "QFontDialog"
#include "QInputDialog"
#include "QMessageBox"

第一种:QFileDialog 对话框

(1)打开一个文件

   //选择单个文件
     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() 函数返回的是选择文件的带路径的完整文件名,如果在对话框里取消选择,则返回字符串为空。

(2) 打开多个文件

    //选择多个文件
        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));

getOpenFileNames() 函数的传递参数与 getOpenFileName() —样,只是返回值是一个字符串列表,列表的每一行是选择的一个文件。

(3)选择已有目录

  //选择目录
    QString file_path = QFileDialog::getExistingDirectory(this, "请选择文件路径...", "./");
    if(!file_path.isEmpty())
    {
          ui->plainTextEdit->appendPlainText(file_path);
    }

静态函数 QCoreApplication::applicationDirPath() 返回应用程序可执行文件所在的目录,getExistingDirectory() 函数的返回值是选择的目录名称字符串。

(4)选择保存文件名

    //保存文件
        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);

getSaveFileName() 函数时,若选择的是一个己经存在的文件,会提示是否覆盖原有的文件。如果提示覆盖,会返回为选择的文件,但是并不会对文件进行实质操作,对文件的删除操作需要在选择文件之后自己编码实现。

第二种:QColorDialog 对话框

void Dialog::on_pushButton_4_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::isValid() 函数来判断返回是否有效。

第三种:QFontDialog 对话框

 //选择字体
        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标准输入对话框

(1)输入字符串

 //输入字符串
        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);

 其中编辑框响应模式是枚举类型 QLineEdit::EchoMode,它控制编辑框上文字的显示方式,正常情况下选择 QLineEdit::Normal;如果是输入密码,选择 QLineEdit::Password

(2)输入整数

  //输入整数
        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)输入浮点数

 //输入浮点数
        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)下拉列表选择

//条目选择输入
        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 消息对话框

(1)消息提示

   //information 消息框
    QString dlgTitle="information消息框";//对话框标题
    QString strInfo="文件已经打开,字体大小已设置";//提示内容
    QMessageBox::information(this, dlgTitle, strInfo,
    QMessageBox::Ok,QMessageBox::NoButton);

其中,parent 是对话框的父窗口,指定父窗口之后,打开对话框时,对话框将自动显示在父窗口的上方中间位置;title 是对话框标题字符串;text 是对话框需要显的信息字符串;buttons 是对话框提供的按钮,缺省只有一个 OK 按钮;defaultButton 是缺省选择的按钮,缺省表示没有选择。

(2)警告提示

  //warnning 消息框
    QString dlgTitle="warning 消息框";
    QString strInfo="文件内容已经被修改";
    QMessageBox::warning(this, dlgTitle, strInfo);

StandardButton 是各种按钮的定义,如 OK、Yes、No、Cancel 等,其枚举取值是 QMessageBox::Ok、QMessageBox::Cancel、QMessageBox::Close 等。

(3)阻止提示

//critical 消息框
    QString dlgTitle="critical消息框";
    QString strInfo="有不明程序访问网络";
    QMessageBox::critical(this, dlgTitle, strInfo);

 (4)关于提示

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

(5) 确认选择对话框

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

三、Qt实现界面切换:

功能描述:实现点击主界面的按钮,打开另一个界面的功能。

(1)建好一个Qt项目

(2)在此基础上,添加一个新的ui文件

(3)第一个窗体的头文件里声明第二个窗体的头文件

(4)第一个窗体添加按钮控件,并转到槽,槽函数按照以下设置

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值