QFile类,以及利用QFile进行最基本的text文件打开与保存

2023-11-16

在qt中,操作现存文件的流程:

一:QFileDialog   利用这个类可以通过对话框获得文件的目录  QFileDialog::getOpenFileName()

二:QFile       利用这个类,我们可以打开文件

三 :QTextStream  这是一个txt流,用于读写文件

具体类的代码展示

一:QfileDialog

 QString path=QFileDialog::getOpenFileName(this,tr("open File"),".",tr("Text Files(*.txt)"));   // 获得文件的地址

二:QFile

  QFile file(path); //  创建文件类 file

三:

 QTextStream in(&file);// 将文件file类 注入in 流中
 textEdit->setText(in.readAll());// 将txt流in 中的内容转送给TextEdit

主要细节代码展示

    //下面是添加动作的代码,将动作进行绑定,进而进行下一步的操作

    // 打开文件的动作    
    openAction = new QAction(QIcon(":/images/file-open"), tr("&Open..."), this);
    openAction->setShortcuts(QKeySequence::Open);
    openAction->setStatusTip(tr("Open an existing file"));
     //保存文件的动作
    saveAction = new QAction(QIcon(":/images/file-save"), tr("&Save..."), this);
    saveAction->setShortcuts(QKeySequence::Save);
    saveAction->setStatusTip(tr("Save a new file"));


    //将动作添加到菜单栏上
    QMenu *file = menuBar()->addMenu(tr("&File"));
    file->addAction(openAction);
    file->addAction(saveAction);
    //将动作添加到工具栏上
    QToolBar *toolBar = addToolBar(tr("&File"));
    toolBar->addAction(openAction);
    toolBar->addAction(saveAction);

    textEdit = new QTextEdit(this);
    setCentralWidget(textEdit);
///
//对动作与方法进行绑定
connect(openAction, &QAction::triggered, this, &MainWindow::openFile);
connect(saveAction, &QAction::triggered, this, &MainWindow::saveFile);

///
//动作绑定的方法的具体实现
    void MainWindow::openFile()
    {
        QString path = QFileDialog::getOpenFileName(this,
                                                    tr("Open File"),
                                                    ".",
                                                    tr("Text Files(*.txt)"));
//从QDialog对话框,获得文件的地址目录
        if(!path.isEmpty()) {//判断文件地址是否为空
            QFile file(path);   //创建文件类
            if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {//判断文件是否可执行
                QMessageBox::warning(this, tr("Read File"),
                                     tr("Cannot open file:\n%1").arg(path));
                return;
            }
            QTextStream in(&file);//创建text流
            textEdit->setText(in.readAll()); //将流中的内容输出到textEdit
            file.close();
        } else {
            QMessageBox::warning(this, tr("Path"),
                                 tr("You did not select any file."));
        }
    }



//保存文件的方法

    void MainWindow::saveFile()
    {
        QString path = QFileDialog::getSaveFileName(this,
                                                    tr("Open File"),
                                                    ".",
                                                    tr("Text Files(*.txt)"));
        if(!path.isEmpty()) {
            QFile file(path);
            if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
                QMessageBox::warning(this, tr("Write File"),
                                           tr("Cannot open file:\n%1").arg(path));
                return;
            }
            QTextStream out(&file);
            out << textEdit->toPlainText();
            file.close();
        } else {
            QMessageBox::warning(this, tr("Path"),
                                 tr("You did not select any file."));
        }
    }

 

在结尾,要着重讲一个类方法:getOpenFileName

    QString getOpenFileName(QWidget * parent = 0,
                            const QString & caption = QString(),
                            const QString & dir = QString(),
                            const QString & filter = QString(),
                            QString * selectedFilter = 0,
                            Options options = 0)
/*
parent:父窗口。我们前面介绍过,Qt 的标准对话框提供静态函数,用于返回一个模态对话框
caption:对话框标题;
dir:对话框打开时的默认目录,“.” 代表程序运行目录,“/” 代表当前盘符的根目录(特指 Windows 平台;Linux 平台当然就是根目录),这个参数也可以是平台相关的,比如“C:\\”等;
    filter:过滤器。我们使用文件对话框可以浏览很多类型的文件,但是,很多时候我们仅希望打开特定类型的文件。比如,文本编辑器希望打开文本文件,图片浏览器希望打开图片文件。过滤器就是用于过滤特定的后缀名。如果我们使用“Image Files(*.jpg *.png)”,则只能显示后缀名是 jpg 或者 png 的文件。如果需要多个过滤器,使用“;;”分割,比如“JPEG Files(*.jpg);;PNG Files(*.png)”;

selectedFilter:默认选择的过滤器;
options:对话框的一些参数设定,比如只显示文件夹等等,它的取值是 enum QFileDialog::Option,每个选项可以使用 | 运算组合起来。
*/

 

这节主要学到两个知识点:

一:如何根据QFileDialog对话框打开文件对应的文件

二:怎样填写QFile文件内容并且保存

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QFile类,以及利用QFile进行最基本的text文件打开与保存 的相关文章

随机推荐

  • pandas set_index和reset_index

    mport pandas as pd df a pd DataFrame data A B C A1 B1 C1 columns first second third print df a df a set index first seco
  • [项目管理-28]:四象限法与任务的时间优先级管理

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 前言 第1章 四象限法介绍 1 1 概述 1 2 四象限优先级顺序 1 3 详细说明 前言 在项目管理中 我们经常遇到对各种各样的任务
  • 让Layui的table模块支持动态表头

    layui自带的table js插件是不支持的 这里我们简单的加几个字符进去 就可以支持了 1 打开插件目录下的layui lay modules目录 用文本文件打开table js 然后搜索 item2 title 在table js将
  • idea中如何创建xml文件

    本人做java开发程序员已经三年多了 从进入企业至今一直使用idea 对此开发工具还算了解 本人使用的版本 我是一个比较守旧的人 在2020年的今天还是依然使用2017年的版本 还请光大网友见谅哈 今天想说的就是如何在idea中创建 xml
  • docker高级篇(mysql主从,redis主从搭建,Dockerfile解析及docker-compose编排)

    本篇主要是mysql主从 redis主从搭建 Dockerfile解析及docker compose编排 轻量化可视化工具Portainer 重量级工具CAdvisor InfluxDB Granfana的使用 docker的安装 配置 卸
  • 如何把swf的动画嵌入到ppt中_flash(.swf)嵌入ppt中

    利用ppt的控件工具箱中的shockwave flash object控件 添加一个swf文件到ppt 然后右击这个swf文件编辑其属性时 把EmbedMovie一项的值改为True 就表示将其嵌入ppt 你就可以删除swf源文件了 使用
  • ThinkPad E40 XP 安装SATA/AHCI驱动

    ThinkPad E40 XP 安装SATA AHCI驱动 2010 11 06 16 42 我的机子是ThinkPad E40 0578A59 安装XP之后准备打开SATA硬盘的AHCI模式并安装其驱动 但是总是安装失败 只要在BIOS里
  • 吃透这份“Java进阶核心手册”再战字节,直接把面试官按在地上摩擦

    前言 本人计算机本科 已经有两年Java开发经验 由于原来公司已经不能满足我的需求 辞去原来的工作准备跳槽大厂 在辞职之前也认为有做过一段时间的准备 2021年8月初 我满怀信心去字节跳动面试Java研发岗位 结果当场被字节面试官吊打 莫不
  • echarts后台获取数据,前台实现饼图显示并自定义图形的数据表展示格式

    1 实现效果图 切换前效果 切换后效果 2 关键的js代码 var myChart echarts init document getElementById aaa 为echarts对象加载数据 var opts post getUnitA
  • JavaScript DOM(二)查

    书接上回 节点 DOM中有许多不同类型的节点 接下来我们先看看其中的三种 元素节点 文本节点和属性节点 元素节点 指该html里面标签的名字就是元素的名字 例如 我们使用的 p p ul 和 div 之类的元素 p标签的名字是 p 无序列表
  • 安装Node(脚手架)

    目录 一 安装node 脚手架 1 1 配置vue config js 1 2 vue cli3x的目录介绍 1 3 package json 最后 一 安装node 脚手架 从官网直接下载安装即可 自带npm包管理工具 https nod
  • [1132]Flink与Kafka版本对应关系

    以下为Flink和Kafka的版本对照表 Flink版本 Kafka版本 1 12 X 2 4 1 1 11 X 2 4 1 1 10 X 2 2 1 1 9 X 2 2 0 1 8 X 2 0 1 1 7 X 2 0 1 0 10 x 0
  • 怎么把服务器安装系统还原,云服务器磁盘怎么安装系统还原

    云服务器磁盘怎么安装系统还原 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 如果Windows操作系统弹性云服务器未安装
  • 程序源码分享-STM32的PID实验(含DAC和ADC)

    一 PID 算法原理 在工业应用中 PID 及其衍生算法是应用最广泛的算法之一 是当之无愧的万能算法 如果能够熟练掌握 PID 算法的设计与实现过程 对于一般的研发人员来讲 应该是足够应对一般研发问题了 在我所接触的控制算法当中 PID 控
  • python链接oracle数据库以及数据库的增删改查

    初次使用python链接oracle 所以想记录下我遇到的问题 便于向我这样初次尝试的朋友能够快速的配置好环境进入开发环节 1 首先 python链接oracle数据库需要配置好环境 我的相关环境如下 1 python Python 3 6
  • 推荐算法3—基于用户的协同过滤算法

    基于邻域的算法是推荐系统中最基本的算法 该算法分为两大类 一类是基于用户的协同过滤算法 另一类是基于物品的协同过滤算法 1 基础算法 在一个在线个性化推荐系统中 当一个用户A需要个性化推荐时 可以先找到和他有相似兴趣的其他用户 然后把那些用
  • 命令执行漏洞原理和测试

    PHP system exec shell exec passthru popen proc popen等称为高危漏洞 原理 只要程序可以调用系统命令的情况下都可以发生命令执行漏洞 条件 用户能够控制函数输入 存在可以执行代码的危险函数 命
  • Linux基础学习(下)——VMWare+CentOS7

    目录 Linux账号管理 用户组管理 磁盘管理 进程管理 Linux环境安装 三种软件安装方式 扩展 VMware使用 Linux账号管理 Linux系统是一个多用户多任务的分时操作系统 任何一个要使用系统资源的用户 都必须首先向系统管理员
  • linux下错误使用pthread_mutex_lock导致程序奔溃问题分析

    在进行程序开发过程中 错误使用了pthread mutex lock导致程序概率性的奔溃 奔溃时报如下错误 问题分析 本文分析在Linux应用程序中错误使用pthread mutex锁时会概率性触发SIG ABRT信号而导致程序崩溃 库打印
  • QFile类,以及利用QFile进行最基本的text文件打开与保存

    在qt中 操作现存文件的流程 一 QFileDialog 利用这个类可以通过对话框获得文件的目录 QFileDialog getOpenFileName 二 QFile 利用这个类 我们可以打开文件 三 QTextStream 这是一个tx