《十二》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.mzph.cn/bicheng/6007.shtml

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

相关文章

基于React实现B站评论区

今天继续来学习一下React&#xff0c;使用React实现B站评论区&#xff0c;如下图&#xff1a; 在使用React开发类似B站评论区的功能时&#xff0c;我们需要考虑以下几个关键点来构建一个基本的评论系统&#xff1a; 1. 设计组件结构 首先&#xff0c;设计组件结构是关键。至少…

Unity Animation--动画剪辑

Unity Animation--动画剪辑 动画剪辑 动画剪辑是Unity动画系统的核心元素之一。Unity支持从外部来源导入动画&#xff0c;并提供创建动画剪辑的能力使用“动画”窗口在编辑器中从头开始。 外部来源的动画 从外部来源导入的动画剪辑可能包括&#xff1a; 人形动画 运动捕捉…

css---浮动知识点精炼汇总

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 浮动简单理解与介绍 这是我们普通的页面标签效果。 每个标签从上到下依次排列。 浮动顾名思义就是让这个标签飞翔起来。 他飞起来后&#xff0c;后面的标签来到他的位置上。 而浮动的标签就会显示在标签的上面。…

设计模式之MVC模式

在编程江湖闯荡多年&#xff0c;我手中打磨过的设计模式多如繁星&#xff0c;但论及经典与实用&#xff0c; MVC&#xff08;Model-View-Controller&#xff09;模式 绝对是个中翘楚&#xff01;它不仅是Web应用的骨架&#xff0c;更是软件架构的智慧结晶。今天&#xff0c;咱们…

LeetCode-网络延迟时间(Dijkstra算法)

每日一题 今天刷到一道有关的图的题&#xff0c;需要求单源最短路径&#xff0c;因此使用Dijkstra算法。 题目要求 有 n 个网络节点&#xff0c;标记为 1 到 n。 给你一个列表 times&#xff0c;表示信号经过 有向 边的传递时间。 times[i] (ui, vi, wi)&#xff0c;其中 …

Mybatis-Plus学习:快速入门、核心功能、扩展功能、插件功能

文章目录 MybatisPlus快速入门快速开始常见注解常见配置 核心功能条件构造器&#xff08;Wrapper&#xff09;自定义SQLService接口基本用法基础业务接口复杂业务接口Lamda查询Lamda更新批量新增 扩展功能代码生成代码生成器快速开发插件 静态工具逻辑删除枚举处理器JSON处理器…

万界星空科技商业开源MES+项目合作+商业开源低代码平台

今天我想和大家分享的是一套商业开源的 MES制造执行管理系统带源码。对于制造业而言&#xff0c;MES 是一个至关重要的系统&#xff0c;它可以帮助企业提高生产效率、优化资源利用、提高产品质量&#xff0c;从而增强市场竞争力。 什么是 MES&#xff1f; MES 是指通过计算机技…

# notepad++ 编辑器英文版,如何打开自动换行

notepad 编辑器英文版&#xff0c;如何打开自动换行 在Notepad中&#xff0c;如果你想要开启自动换行功能&#xff0c;可以按照以下步骤操作&#xff1a; 1、打开 Notepad 编辑器。 1.1. 依次点击菜单栏中的【视图】&#xff0c;英文版对应【View】。1.2. 在【视图】下拉菜单…

商务谈判技巧与口才书籍有哪些类型

商务谈判技巧与口才书籍有哪些类型&#xff08;3篇&#xff09; 商务谈判技巧与口才书籍的类型丰富多样&#xff0c;以下从三个角度进行介绍&#xff1a; **篇&#xff1a;基础理论与策略类书籍 这类书籍通常深入剖析谈判的本质&#xff0c;系统介绍谈判的原理、技巧和策略。…

量子城域网建设设备系列(二):量子密钥管系统(KMS)

在上文介绍光量子交换机的文章中我们提到&#xff0c;量子保密通信网络的通道切换是由量子密钥管理系统&#xff08;Key Management System&#xff0c;KMS&#xff09;给光量子交换机下发信道切换指令&#xff0c;实现整个网络中任意两对量子密钥分发终端的量子信道互联互通&a…

【跟马少平老师学AI】-【神经网络是怎么实现的】(九)长短期记忆网络

一句话归纳&#xff1a; 1&#xff09;RNN也会存在梯度消失的问题。 2&#xff09;同一句话&#xff0c;对于不同的任务&#xff0c;句中不同的词起的作用也不一样。 3&#xff09;LSTM&#xff08;长短期记忆&#xff09;子网络&#xff1a; 门&#xff0c;让输入经过运算&…

与Apollo共创生态:探索自动驾驶的未来蓝图

目录 引言Apollo开放平台Apollo开放平台企业生态计划Apollo X 企业自动驾驶解决方案&#xff1a;加速企业场景应用落地Apollo开放平台携手伙伴共创生态生态共创会员权益 个人心得与展望技术的多元化应用数据驱动的智能化安全与可靠性的重视 结语 引言 就在2024年4月19日&#x…

SpringBoot的ProblemDetails

1.RFC 7807 之前的项目如果出现异常&#xff0c;默认跳转到error页面。或者是抛出500 异常。 但是对于前后端分离的项目&#xff0c;Java程序员不负责页面跳转&#xff0c;只需要 把错误信息交给前端程序员处理即可。而RFC 7807规范就是将异常 信息转为JSON格式的数据。这个…

导数之光:探寻机器学习中的微变奥秘

在当今这个数据驱动的时代&#xff0c;机器学习以其强大的学习和预测能力&#xff0c;成为了推动科技进步的重要力量。而在机器学习的背后&#xff0c;数学原理&#xff0c;尤其是导数的应用&#xff0c;为其提供了坚实的理论支撑。本文将详细探讨导数在机器学习中的体现&#…

如何使用 GPT API 从 PDF 出版物导出研究图表?

原文地址&#xff1a;how-to-use-gpt-api-to-export-a-research-graph-from-pdf-publications 揭示内部结构——提取研究实体和关系 2024 年 2 月 6 日 介绍 研究图是研究对象的结构化表示&#xff0c;它捕获有关实体的信息以及研究人员、组织、出版物、资助和研究数据之间的关…

IDEA 创建Servlet-HelloWorldServlet

servlet 1.创建空项目2.配置web项目3.配置Tomcat4.加载Tomcat包5.创建HelloWorldServlet类6.配置web.xml7.运行get与post请求 1.创建空项目 2.配置web项目 3.配置Tomcat 4.加载Tomcat包 5.创建HelloWorldServlet类 public class controller extends HttpServlet {Override//get…

【Mellanox命令之】如何查看系统MFT版本是否与OFED和FW匹配?(mst version、rpm -qa|grep mft)

0. 背景 如果出现升级了OFED&#xff0c;以及FW、lib等&#xff0c;但是在Debug中遇到异常。可能与mft版本不匹配有关。 那么如何获取mft与OFED、FW之间的匹配关系呢&#xff1f; 1. 查看MFT版本 mft因为不是一个命令&#xff0c;而是4类工具的集合&#xff08;参考兄弟篇&a…

DRF版本组件源码分析

DRF版本组件源码分析 在restful规范中要去&#xff0c;后端的API中需要体现版本。 3.6.1 GET参数传递版本 from rest_framework.versioning import QueryParameterVersioning单视图应用 多视图应用 # settings.pyREST_FRAMEWORK {"VERSION_PARAM": "versi…

图像处理1,灰度,data,for循环批处理图片,图片属性查看,图片单通道查看,椒盐噪声的生成,滤波处理,图像分割

图像处理1 灰度处理data库的使用for循环批处理图像对图像属性的查看图片类型图片尺寸图片宽度图像高度通道数总像素个数最大像素值最小像素值&#xff0c;像素平均值图像点像素值 for循环分别显示图像rgb通道椒盐噪声的生成中值滤波处理高斯模糊处理图像切割 灰度处理 from sk…

SpringCloudAlibaba:3.1dubbo

dubbo 概述 简介 Apache Dubbo 是一款 RPC 服务开发框架&#xff0c;用于解决微服务架构下的服务治理与通信问题 官方提供了 Java、Golang、Rust 等多语言 SDK 实现 Dubbo的开源故事 最早在2008年&#xff0c;阿里巴巴就将Dubbo捐献到开源社区&#xff0c;它很快成为了国内开源…