《十二》Qt各种对话框之FileDialog文件对话框及QMessageBox 消息对话框

QFileDialog 对话框

选择打开一个文件

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

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

QFileDialog::getOpenFileName() 函数需要传递 3 个字符串型参数,分别如下:

  1.     对话框标题,这里设置为"选择一个文件"。
  2.     初始化目录,打开对话框时的初始目录,这里用QDinxurrentPath()获取应用程序当前目录。
  3.     文件过滤器,设置选择不同后缀的文件,可以设置多组文件,如:
QString f ilter="文本文件.txt);;图片文件(* .jpg *.gif *.png);;所有文件(*.*)";

 每组文件之间用两个分号隔开,同一组内不同后缀之间用空格隔开。
QFileDialog::getOpenFileName() 函数返回的是选择文件的带路径的完整文件名,如果在对话框里取消选择,则返回字符串为空。

选择打开多个文件

若要选择打开多个文件,可使用静态函数 QFileDialog::getOpenFileNames(),“打开多个文件”按钮的响应代码如下:

 1 void Dialog::on_btnOpenMulti_clicked()2 { //选择多个文件3     //获取应用程序的路径4     QString curPath=QDir::currentPath();//获取系统当前目录5     QString dlgTitle="选择多个文件"; //对话框标题6     QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)"; //文件过滤器7     QStringList fileList=QFileDialog::getOpenFileNames(this,dlgTitle,curPath,filter);8     for (int i=0; i<fileList.count();i++)9         ui->plainTextEdit->appendPlainText(fileList.at(i));
10 }

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

选择已有目录

选择己有目录可调用静态函数 QFileDialog::getExistingDirectory(),同样,若需要传递对话框标题和初始路径,还应传递一个选项,一般用 QFileDialog::ShowDirsOnly,表示对话框中只显示目录。

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

 选择保存文件名

选择一个保存文件,使用静态函数 QFileDialog::getSaveFileName(),传递的参数与 getOpenFileName() 函数相同。只是在调用 getSaveFileName() 函数时,若选择的是一个己经存在的文件,会提示是否覆盖原有的文件。如果提示覆盖,会返回为选择的文件,但是并不会对文件进行实质操作,对文件的删除操作需要在选择文件之后自己编码实现。

如下面的代码,即使选择覆盖文件,由于代码里没有实质地覆盖原来的文件,也不会对选择的文件造成任何影响:

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

 写一个栗子:

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include<qpushbutton.h>
#include<QLabel>
#include<QLineEdit>
#include<QHBoxLayout>
#include<QVBoxLayout>
#include<QFileDialog>class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();private:QLabel *FileNameLabel;QLineEdit *FileNameLineEdit;QPushButton *FileBtn;QLabel *FileSizeLabel;QLineEdit *FileSizeLineEdit;QPushButton *GetFileInfoBtn;private slots:void GetFileInfo();//用于打开问你件void GetFileSizeInfo();//用于获取文件大小
};
#endif // DIALOG_H
#include "dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent)
{setWindowTitle("FileDialog文件对话框测试");//创建控件FileNameLabel=new QLabel("文件名称: ");FileNameLineEdit=new QLineEdit;FileBtn=new QPushButton("选择...");FileSizeLabel=new QLabel("文件大小:");FileSizeLineEdit=new QLineEdit;GetFileInfoBtn=new QPushButton("获取文件大小信息");//排列布局QGridLayout *glayout=new QGridLayout;glayout->addWidget(FileNameLabel,0,0);glayout->addWidget(FileNameLineEdit,0,1);glayout->addWidget(FileBtn,0,2);glayout->addWidget(FileSizeLabel,1,0);glayout->addWidget(FileSizeLineEdit,1,1,1,2);QHBoxLayout *hlayout=new QHBoxLayout;hlayout->addWidget(GetFileInfoBtn);QVBoxLayout *vlayout=new QVBoxLayout(this);vlayout->addLayout(glayout);vlayout->addLayout(hlayout);//连接信号connect(FileBtn,SIGNAL(clicked()),this,SLOT(GetFileInfo()));connect(GetFileInfoBtn,SIGNAL(clicked()),this,SLOT(GetFileSizeInfo()));
}Dialog::~Dialog()
{
}void Dialog::GetFileInfo()
{QString strFileName=QFileDialog::getOpenFileName(this,"打开","/","File(*)");FileNameLineEdit->setText(strFileName);}void Dialog::GetFileSizeInfo()
{//获取单行编辑框控件里面文件路径等QString strFileSize=FileNameLineEdit->text();QFileInfo fileinfo(strFileSize);qint64 FileSize=fileinfo.size();FileSizeLineEdit->setText(QString::number(FileSize));
}

这是一个基于Qt框架的对话框程序,主要实现了获取指定文件的路径和大小,并将其显示在对应的单行编辑框控件中。具体实现方式如下:

  1. GetFileInfo()函数:该函数通过调用QFileDialog::getOpenFileName()方法弹出一个打开文件对话框,让用户选择要打开的文件。选择完成后,将文件名显示在一个单行编辑框控件中。

  2. GetFileSizeInfo()函数:该函数获取单行编辑框控件中的文件路径,使用QFileInfo类获取该文件的大小,并将大小显示在另一个单行编辑框控件中。

这两个函数都是Dialog类的成员函数,其中this指针代表当前对话框对象。可以通过这些函数方便地实现文件信息的获取和显示。

运行结果:

QMessageBox 消息对话框

简单信息提示

消息对话框 QMessageBox 用于显示提示、警告、错误等信息,或进行确认选择,由几个静态函数实现这些功能(详见表 1)。其中 warning()、information()、critical() 和 about() 这几个函数的输入参数和使用方法相同,只是信息提示的图标有区别。

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

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

 

warning() 函数的返回结果是 StandardButton 类型。对话框上显示的按钮和缺省选中按钮也是 StandardButton 类型。

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

详见 Qt 帮助文档中的StandardButton 类型的说明。

对于 warning()、information()、critical() 和 about() 这几种对话框,它们一般只有一个 OK 按钮,且无须关心对话框的返回值。所以,使用缺省的按钮设置即可。

确认选择对话框 

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 类型变量,表示哪个按钮被单击了。

举个栗子: 

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include<qpushbutton.h>
#include<QLabel>
#include<QGridLayout>
#include<QMessageBox>class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();private:QLabel *displabel;QPushButton *questionbtn;//问题消息命令按钮QPushButton *infomationbtn;//信息消息命令按钮QPushButton *warningbtn;//警告消息命令按钮QPushButton *criticalbtn;//错误消息命令按钮QPushButton *aboutbtn;//消息框命令按钮QPushButton *aboutqtbtn;//命令按钮QGridLayout *glayout;//布局private slots:void DisplayQuestionMsg();void DisplayInfomationMsg();void DisplayWarningMsg();void DisplayCriticalMsg();void DisplayAboutMsg();void DisplayAboutQtMsg();};
#endif // DIALOG_H

 

#include "dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent)
{resize(320,150);setWindowTitle("QMessqge对话框控件测试");glayout=new QGridLayout(this);displabel=new QLabel("请选择:");questionbtn=new QPushButton("Qusestion");infomationbtn=new QPushButton("Infomation");warningbtn=new QPushButton("Warning");criticalbtn=new QPushButton("critical");aboutbtn=new QPushButton("About");aboutqtbtn=new QPushButton("ABoutQt");glayout->addWidget(displabel,0,0,1,2);glayout->addWidget(questionbtn,1,0);glayout->addWidget(infomationbtn,1,1);glayout->addWidget(warningbtn,2,0);glayout->addWidget(criticalbtn,2,1);glayout->addWidget(aboutbtn,3,0);glayout->addWidget(aboutqtbtn,3,1);connect(questionbtn,SIGNAL(clicked()),this,SLOT(DisplayQuestionMsg()));connect(infomationbtn,SIGNAL(clicked()),this,SLOT(DisplayInfomationMsg()));connect(warningbtn,SIGNAL(clicked()),this,SLOT(DisplayWarningMsg()));connect(criticalbtn,SIGNAL(clicked()),this,SLOT(DisplayCriticalMsg()));connect(aboutbtn,SIGNAL(clicked()),this,SLOT(DisplayAboutMsg()));connect(aboutqtbtn,SIGNAL(clicked()),this,SLOT(DisplayAboutQtMsg()));
}Dialog::~Dialog()
{
}void Dialog::DisplayQuestionMsg()
{displabel->setText("Question Message Box");switch (QMessageBox::question(this,"Question消息框","是否退出程序?",QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok)) {case QMessageBox::Ok:displabel->setText("你选择QuestionMsg命令按钮中的Ok");break;case QMessageBox::Cancel:displabel->setText("你选择QuestionMsg命令按钮中的Cancel");break;default:break;}return;
}void Dialog::DisplayInfomationMsg()
{displabel->setText("Infomation Message Box");QMessageBox::information(this,"Information消息框","Information消息框测试成功");return;
}void Dialog::DisplayWarningMsg()
{displabel->setText("Warning Message Box");switch (QMessageBox::question(this,"Question消息框","数据库student是否删除",QMessageBox::Discard|QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Save)) {case QMessageBox::Discard:displabel->setText("你选择WarningMsg命令按钮中的Discard");break;case QMessageBox::Save:displabel->setText("你选择WarningMsg命令按钮中的Save");break;case QMessageBox::Cancel:displabel->setText("你选择WarningMsg命令按钮中的Cancel");default:break;}
}void Dialog::DisplayCriticalMsg()
{displabel->setText("Critical Message Box");QMessageBox::critical(this,"critical消息框","数据库文件备份错误");return;
}void Dialog::DisplayAboutMsg()
{displabel->setText("About Message Box");QMessageBox::about(this,"about消息框","测试Qt about消息框");return;
}void Dialog::DisplayAboutQtMsg()
{displabel->setText("About Qt  Message Box");QMessageBox::aboutQt(this,"about qt消息框-0--");return;
}

这一大段代码,头文件中主要是定义一些我们需要用到的量,包括按钮和输入栏 以及一些槽函数。

在源文件中,我们先进行了实例化操作和布局上的安排,紧接着就开始链接槽函数。

DisplayQuestionMsg()函数,用于:你点击按钮之后询问是否退出程序,出现ok和cancel按钮。
DisplayInfomationMsg()函数,用于消息框测试,判断你是否点击了。
DisplayWarningMsg()函数用于发出警告,目前的 功能类似第一个。
DisplayCriticalMsg()函数用于测试critical按钮,类似第二个。
DisplayAboutMsg()同2.
DisplayAboutQtMsg()函数用于打开关于qt功能。
结果:

感谢阅读!!!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/318108.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React | React.cloneElement 的使用

我看到同事的代码里有 cloneElement&#xff0c;于是去了解了一下这个函数。 就跟它的名字一样&#xff0c;克隆元素&#xff0c;可以基于一个元素创建一个新的元素&#xff0c;并且为新元素添加新的属性或者覆盖已有的属性。 下面是一个简单例子&#xff1a; .node1 {backg…

PotatoPie 4.0 实验教程(41) —— FPGA实现RISC-V 扩展 GPIO UART Timer功能

TD工程介绍 我们提供的TD工程里的RISC-V核默认就开启了GPIO UART扩展&#xff0c;可以看到还有SPI和I2C扩展。因此后面的实验中TD的工程我们基本不怎么修改TD的内容&#xff0c;只需要修改TD工具中Soc_Top.v文件中的TCM0_INITFILE为FD生成的固件名称即可&#xff0c;主要修我以…

Apache Seata基于改良版雪花算法的分布式UUID生成器分析2

title: 关于新版雪花算法的答疑 author: selfishlover keywords: [Seata, snowflake, UUID, page split] date: 2021/06/21 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 关于新版雪花算法的答疑 在上一篇关于新版雪花算法的解析中…

Hive优化以及相关参数设置

1.表层面设计优化 1.1 表分区 分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹&#xff0c;该文件夹下是该分区所有的数据文件。Hive 中的分区就是分目录&#xff0c;把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE 子句中的表达式选择查询所需要…

Apache Seata基于改良版雪花算法的分布式UUID生成器分析1

title: Seata基于改良版雪花算法的分布式UUID生成器分析 author: selfishlover keywords: [Seata, snowflake, UUID] date: 2021/05/08 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Seata基于改良版雪花算法的分布式UUID生成器分析…

10.JAVAEE之网络编程

1.网络编程 通过网络,让两个主机之间能够进行通信 >基于这样的通信来完成一定的功能进行网络编程的时候,需要操作系统给咱们提供一组 AP1, 通过这些 API才能完成编程&#xff08;API 可以认为是 应用层 和 传输层 之间交互的路径&#xff09;&#xff08;API:Socket API相当…

NDK 基础(一)—— C 语言知识汇总

本系列文章主要是介绍一些 NDK 开发所需的基础知识&#xff0c;目录如下&#xff1a; NDK 基础&#xff08;一&#xff09;—— C 语言知识汇总 NDK 基础&#xff08;二&#xff09;—— C 语言基础与特性1 NDK 基础&#xff08;三&#xff09;—— C 语言基础与特性2 NDK 基础…

比较美观即将跳转html源码

源码介绍 比较美观即将跳转html源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 源码截图 比较美观的一个跳转界面&#xff0c;修改方法如上&…

FreeRTOS-系统时钟节拍和时间管理

一、前言 任何操作系统都需要提供一个时钟节拍&#xff0c;以供系统处理诸如延时&#xff0c;超时等与时间相关的事件。时钟节拍是特定的周期性中断&#xff0c; 这个中断可以看做是系统心跳。 中断之间的时间间隔取决于不同的应用&#xff0c;一般是 1ms – 100ms。时钟的节拍…

【C++ —— 多态】

C —— 多态 多态的概念多态的定义和实现多态的构成条件虚函数虚函数的重写虚函数重写的两个例外协变&#xff1a;析构函数的重写 C11 override和final重载、覆盖(重写)、隐藏(重定义)的对比 抽象类概念接口继承和实现继承 多态的继承虚函数表多态的原理动态绑定和静态绑定 单继…

BERT一个蛋白质-季军-英特尔创新大师杯冷冻电镜蛋白质结构建模大赛-paipai

关联比赛: “创新大师杯”冷冻电镜蛋白质结构建模大赛 解决方案 团队介绍 paipai队、取自 PAIN AI&#xff0c;核心成员如我本人IvanaXu(IvanaXu GitHub)&#xff0c;从事于金融科技业&#xff0c;面向银行信用贷款的风控、运营场景。但我们团队先后打过很多比赛&#xf…

算法系列--BFS解决拓扑排序

&#x1f495;"请努力活下去"&#x1f495; 作者&#xff1a;Lvzi 文章主要内容&#xff1a;算法系列–算法系列–BFS解决拓扑排序 大家好,今天为大家带来的是算法系列--BFS解决拓扑排序 前言:什么是拓扑排序 拓扑排序–解决有顺序的排序问题(要做事情的先后顺序) …

docker各目录含义

目录含义builder构建docker镜像的工具或过程buildkit用于构建和打包容器镜像&#xff0c;官方构建引擎&#xff0c;支持多阶段构建、缓存管理、并行化构建和多平台构建等功能containerd负责容器生命周期管理&#xff0c;能起、停、重启&#xff0c;确保容器运行。负责镜管理&am…

Java设计模式 _结构型模式_组合模式

一、组合模式 1、组合模式 组合模式&#xff08;Composite Pattern&#xff09;是这一种结构型设计模式。又叫部分整体模式。组合模式依据树形结构来组合对象&#xff0c;用来表示部分以及整体层次关系。即&#xff1a;创建了一个包含自己对象组的类&#xff0c;该类提供了修改…

Idea报错:无法访问org.springframework.boot.SpringApplication

在开发项目时&#xff0c;常常会遇到这种问题&#xff0c;报错信息如下图所示 版本号与jdk版本号存在对应关系&#xff0c;61.0对应jdk17&#xff0c;52.0对应jdk8 所以是某个依赖的版本太高&#xff0c;降低该依赖的版本即可 具体步骤&#xff1a; ①修改pom.xml中spring b…

ASP.NET实验室预约系统的设计

摘 要 实验室预约系统的设计主要是基于B/S模型&#xff0c;在Windows系统下&#xff0c;运用ASP.NET平台和SQLServer2000数据库实现实验室预约功能。该设计主要实现了实验室的预约和管理功能。预约功能包括老师对实验室信息、实验项目和实验预约情况的查询以及对实验室的预约…

ubuntu系统搭建pytorch环境详细步骤【笔记】

实践设备&#xff1a;华硕FX-PRO&#xff08;NVIDIA GeForce GTX 960M&#xff09; 搭建PyTorch环境的详细步骤如下&#xff1a; 1.安装Ubuntu系统&#xff1a; 下载Ubuntu的镜像文件并制作启动盘。将启动盘插入计算机&#xff0c;启动计算机并按照提示安装Ubuntu系统。 2.…

Linux内核之原子操作:atomic_long_dec用法实例(六十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

一起Talk Android吧(第五百五十八回:lombok用法)

文章目录 1. 概述2. 使用方法3. 内容总结 各位看官们大家好&#xff0c;上一回中介绍了如何获取文件读写权限的知识,本章回中将介绍lombok相关的知识。闲话休提&#xff0c;言归正转&#xff0c;让我们一起Talk Android吧&#xff01; 1. 概述 这是一个java库&#xff0c;用来…

ES全文检索支持拼音和繁简检索

ES全文检索支持拼音和繁简检索 1. 实现目标2. 引入pinyin插件2.1 编译 elasticsearch-analysis-pinyin 插件2.2 安装拼音插件 3. 引入ik分词器插件3.1 已有作者编译后的包文件3.2 只有源代码的版本3.3 安装ik分词插件 4. 建立es索引5.测试检索6. 繁简转换 1. 实现目标 ES检索时…