《十二》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.xdnf.cn/news/1410364.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

如何利用ChatGPT撰写满分文案:技巧与实例解析

在当今社会&#xff0c;随着企业越来越重视宣传推广&#xff0c;文案写作已成为关键的营销手段之一。同时&#xff0c;人工智能的快速发展为文案创作提供了新的工具和方法。例如&#xff0c;ChatGPT这种基于自然语言处理的模型&#xff0c;在协助撰写多种文案方面展现出了极大的…

【智能算法】冠豪猪优化算法(CPO)原理及实现

1.背景 2024年&#xff0c;M Abdel-Basset等人受到冠豪猪防御行为启发&#xff0c;提出了冠豪猪优化算法&#xff08;Crested Porcupine Optimizer, CPO&#xff09;。 2.算法原理 2.1算法思想 CPO使用四种不同的保护机制:视觉、声音、气味和物理攻击。第一和第二防御策略(视…

Linux实训-用户和组的管理

实训1&#xff1a;用户的管理 创建一个新用户user1&#xff0c;设置其主目录为/home/user1。查看/etc/passwd文件的最后一行&#xff0c;看看是如何记录的。查看文件/etc/shadow文件的最后一行&#xff0c;看看如何记录的。给用户user1设置密码。再次查看文件/etc/shadow文件的…

暗区突围端游海外版|暗区突围怎么玩 新手游玩攻略分享

游戏中健康系统与其它射击游戏有很大区别&#xff0c;根据受伤部位、伤势的不同&#xff0c;会有不同的表现。除了头部之外&#xff0c;其它部位如果损坏后继续受到伤害&#xff0c;那么伤害将会分摊到身体其它部位。在暗区内或者暗区外都可以对角色进行治疗&#xff0c;角色不…

【算法入门教育赛1D】环形密码 - 字符串 | C++题解与代码

题目链接&#xff1a;https://www.starrycoding.com/problem/161 题目描述 小 e e e有一个宝箱&#xff0c;这个宝箱有一个长度为 n n n的密码&#xff0c;但是这个密码校验器是一个环形&#xff0c;意思是只要密码从任意一位开始读&#xff08;读到最后一位回到第一位继续&a…

【Canvas与艺术】自制朝阳电脑桌面(1920*1080)

【关键点】 线性渐变色绘制天空&#xff0c;径向渐变色绘制太阳&#xff0c;半透明色制作光芒。 【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/&g…

Docker 安装部署 postgres

Docker 安装部署 postgres 1、拉取 postgres 镜像文件 [rootiZbp19a67kznq0h0rgosuxZ ~]# docker pull postgres:latest latest: Pulling from library/postgres b0a0cf830b12: Pull complete dda3d8fbd5ed: Pull complete 283a477db7bb: Pull complete 91d2729fa4d5: Pul…

2023上半年软件设计师上午题——防火墙

防火墙知识点总结 网络级防火墙层次低&#xff0c;但是效率高&#xff0c;因为其使用包过滤和状态监测手段&#xff0c;一般只检验网络包外在 (起始地址、状态) 属性是否异常 , 若异常则过滤掉 , 不与内网通信,因此对应用和用户是透明的。但是这样的问题是&#xff0c;如果遇到…

Redis---------实现查询缓存业务

目录 数据库与缓存之间的工作业务逻辑&#xff1a; 接下来看查询缓存代码实现&#xff0c;主要是捋清楚业务逻辑&#xff0c;代码实现是死的&#xff1a; Controller: Service: P37作业实现&#xff1a;总体逻辑跟上面的业务逻辑差不多 Controller&#xff1a; Service&#…

由于找不到vcruntime140_1.dll无法继续执行此代码的8个解决方法

vcruntime140_1.dll 是一个动态链接库&#xff08;Dynamic Link Library&#xff09;文件&#xff0c;它是Microsoft Visual C Redistributable包的一部分&#xff0c;特别与Visual Studio 2015及之后版本的C运行时环境关联紧密。此文件包含了执行基于Visual C开发的应用程序所…

如何快速的追加文章的内容(在不知道内容的情况下)

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 1、打开工具&#xff0c;切换到文章模块下&#xff0c;快捷键&#xff1a;Ctrl1 2、新建一个文章做演示&#xff0c;001 3、添加一个内容&#xff0c;就随…

订票系统|基于Springboot+vue的火车票订票系统(源码+数据库+文档)

订票系统目录 基于Springbootvue的火车票订票系统 一、前言 二、系统设计 三、系统功能设计 1会员信息管理 2 车次信息管理 3订票订单管理 4留言板管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍…

RoNID:通过生成可靠标签与聚类友好型表征来实现新意图的发现

论文地址&#xff1a;https://arxiv.org/abs/2404.08977 原文地址&#xff1a;intents-are-not-going-away-ronid-is-a-new-intent-discovery-framework 2024 年 4 月 26 日 Robust New Intent Discovery&#xff08;RoNID&#xff09;框架致力于在开放域场景中识别已知意图并合…

韩国云主机安装AMP环境要求科普

AMP环境&#xff0c;即Apache、MySQL和PHP的组合&#xff0c;是许多网站开发者和运维人员常用的环境配置。在韩国云主机上安装AMP环境&#xff0c;需要满足一定的要求以确保顺利运行和高效性能。下面我们将对韩国云主机安装AMP环境的要求进行科普。 首先&#xff0c;韩国云主机…

Vue Canvas图片水印的绘制 图片加水印

效果 定义画布 <canvas width"800" height"800" ref"cn" ></canvas>绘制水印 draw(){const img new Image()img.srchttps://img1.baidu.com/it/u3035183739,1826404114&fm253&fmtauto&app138&fJPEGimg.onload(()…

java版数据结构:深入理解栈和队列:数据结构与应用(vector,stack,queue)

目录 前言 动态数组类&#xff08;vector&#xff09; 特点&#xff1a; 应用&#xff1a; 栈&#xff08;Stack&#xff09; 栈的基础概念&#xff1a; 栈的常用方法&#xff1a; 模拟栈操作&#xff1a; 队列&#xff08;Queue&#xff09; 队列的基础概念 队列的常…

20240502给NanoPi的NEO core开发板编译移远的4G模块的上网程序quectel-CM

20240502给NanoPi的NEO core开发板编译移远的4G模块的上网程序quectel-CM 2024/5/2 16:29 1、默认编译为AMD64/INTEL的x64架构的可执行文件&#xff1a; rootrootrootroot-ThinkBook-16-G5-IRH:~$ rootrootrootroot-ThinkBook-16-G5-IRH:~$ unzip Quectel_QConnectManager_Lin…

如何配置和使用Apollo的component里的plugin

关于如何使用Apollo的Component里的plugin&#xff0c;在Apollo的文档里只有如果和开发的说明却没有找到一个清楚完整说明怎么把plugin跑起来的说明&#xff0c;例如我想把lidar_detection_filter按我们的需求对目标过滤算法作修改然后编译完后&#xff0c;执行 cyber_launch …

2024年【浙江省安全员-C证】考试及浙江省安全员-C证找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【浙江省安全员-C证】考试及浙江省安全员-C证找解析&#xff0c;包含浙江省安全员-C证考试答案和解析及浙江省安全员-C证找解析练习。安全生产模拟考试一点通结合国家浙江省安全员-C证考试最新大纲及浙江省安全…

12 Junit单元测试、反射、注解

单元测试 介绍 Junit单元测试是做什么的&#xff1f; 就是针对最小的功能单元(方法)&#xff0c;编写测试代码对其进行正确性测试。 Junit单元测试框架 可以用来对方法进行测试&#xff0c;它是由Junit公司开源出来的 Junit单元测试的优点是什么&#xff1f; 可以灵活的…