Qt系统相关——QFile和QFileInfo

文章目录

    • 文件操作
    • QFile
    • 使用示例
    • QFileInfo

文件操作

C语言:

  • fopen打开文件
  • freadfwrite读写文件
  • fclose关闭文件

C++:

  • fstream打开文件
  • <<>>流式操作符读写

Linux:

  • open打开文件
  • readwrite读写文件
  • close关闭文件

Qt自己也提供了一套文件操作,同时也兼任上述的方案,但如果要编写Qt程序,还是建议使用Qt提供的文件操作方案。

Qt诞生的太早了,那会C++还没有标准

image-20240923192742013

QFile还派生出一个子类QTemporaryFile,表明一个临时文件,对象销毁,对应文件就自动删除了

QFile

QFile提供了一些操作文件的成员函数:

  • 构造

    QFile(const QString &name, QObject *parent)
    QFile(QObject *parent)
    QFile(const QString &name)
    QFile()
    virtual ~QFile()
    
  • open打开文件

    //比较原生
    bool open(FILE *fh, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
    bool open(int fd, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
    //重写虚函数
    virtual bool open(QIODevice::OpenMode mode) override
    

    OpenMode表明指定哪种方式打开:

    image-20240923194112897

  • read/readLine/readAll读取文件

    qint64 read(char *data, qint64 maxSize)
    QByteArray read(qint64 maxSize)
    QByteArray readAll()
    qint64 readLine(char *data, qint64 maxSize)
    QByteArray readLine(qint64 maxSize = 0)
    
  • write写入文件

    qint64 write(const char *data, qint64 maxSize)
    qint64 write(const char *data)
    qint64 write(const QByteArray &byteArray)
    
  • close关闭文件

    virtual void close()
    

使用示例

实现一个程序,点击窗口里的打开,弹出打开文件的对话框,选择文件,将内容显示到输入框;点击窗口里的保存,将输入框内容写入文件。

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include<QPlainTextEdit>#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();void handleAction1();void handleAction2();
private:Ui::MainWindow *ui;QPlainTextEdit* edit;
};
#endif // MAINWINDOW_H

初始化部分:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QFileDialog>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//获取菜单栏QMenuBar* menuBar = this->menuBar();//添加菜单QMenu* menu = new QMenu("文件");menuBar->addMenu(menu);//添加菜单项QAction* action1 = new QAction("打开");QAction* action2 = new QAction("保存");menu->addAction(action1);menu->addAction(action2);//指定输入框edit = new QPlainTextEdit();QFont font;font.setPixelSize(20);edit->setFont(font);this->setCentralWidget(edit);//连接信号槽connect(action1, &QAction::triggered, this, &MainWindow::handleAction1);connect(action2, &QAction::triggered, this, &MainWindow::handleAction2);
}

打开文件:

void MainWindow::handleAction1()
{//弹出“打开文件”对话框   选择打开文件QString path = QFileDialog::getOpenFileName(this);//文件名显式到状态栏QStatusBar* statusBar = this->statusBar();statusBar->showMessage(path);//根据选择路径    构造QFile对象QFile file(path);if(!file.open(QIODevice::ReadOnly)){statusBar->showMessage(path + "打开文件失败");return;} //读取文件QString text = file.readAll();//关闭文件file.close();//读取到的内容, 输入到输入框当中edit->setPlainText(text);
}

QString重载了=

image-20240923201127064

但是这里需要确保打开的文件是文本文件

保存文件:

void MainWindow::handleAction2()
{//弹出“保存文件”对话框QString path = QFileDialog::getSaveFileName(this);//在状态栏显式文件名QStatusBar* statusBar = this->statusBar();statusBar->showMessage(path);//根据选路径 构造QFile对象   通过写的方式QFile file(path);if(!file.open(QIODevice::WriteOnly)){statusBar->showMessage(path + "打开文件失败");}//读取输入框内容const QString& text = edit->toPlainText();//写入文件file.write(text.toUtf8());//关闭文件file.close();
}

直接写入会报错,类型不匹配,可以转成utf8,返回类型是QByteArray

image-20240923202216877

GIF 2024-9-23 20-28-55


GIF 2024-9-23 20-30-27

QFileInfo

QFileInfo可以获取到Qt的文件的相关属性(文件名、文件路径、文件后缀等)

类似这样的功能在C/C++标准库本来是没有的;

C++17引入了filesystem,可以获取文件的相关属性。

#include "widget.h"
#include "ui_widget.h"
#include<QFileDialog>
#include<QDebug>
#include<QFileInfo>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_clicked()
{//弹出文件对话框,获取文件属性信息QString path = QFileDialog::getOpenFileName(this);//构造QFileInfo对象QFileInfo fileInfo(path);//打印相关属性qDebug() << fileInfo.fileName();qDebug() << fileInfo.suffix();  //文件后缀qDebug() << fileInfo.path();qDebug() << fileInfo.size();qDebug() << fileInfo.isFile();qDebug() << fileInfo.isDir();
}

GIF 2024-9-23 20-45-26

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

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

相关文章

把任务管理器里面的vmware usb arbitrition停了,虚拟机一直识别不到手机设备了

在设备管理器--服务 里面找到VMware usb arbitrition服务&#xff0c;点击“启用”就好了。 参考大佬的文章&#xff1a; 吐血经验&#xff01;&#xff01;&#xff01;解决虚拟机连不上USB&#xff01;最全&#xff01;_为什么vmware虚拟机不能连接上usb设备-CSDN博客

地平线静态目标检测 MapTR 参考算法-V1.0

简介 高清地图是自动驾驶系统的重要组件&#xff0c;提供精确的驾驶环境信息和道路语义信息。传统离线地图构建方法成本高&#xff0c;维护复杂&#xff0c;使得依赖车载传感器的实时感知建图成为新趋势。早期实时建图方法存在局限性&#xff0c;如处理复杂地图元素的能力不足…

品牌互鉴,融通中外|AORO遨游创始人受邀参加2024北京国际品牌周

2024年9月21日&#xff0c;第三届北京国际品牌周在北京金融街英蓝国际金融中心举办&#xff0c;本次盛会以“品牌互鉴&#xff0c;融通中外”为主题&#xff0c;由中国国际商会、中国国际公共关系协会、中国文化管理协会、北京国际设计周主办&#xff0c;中国外文局文化传播中心…

LSM-YOLO: A Compact and Effective ROI Detector for Medical Detection

LSM-YOLO: A Compact and Effective ROI Detector for Medical Detection LSM-YOLO: 一种紧凑且有效的医学检测ROI检测器1.介绍2.相关工作2.1医学感兴趣区域&#xff08;ROI&#xff09;检测2.2多尺度特征用于对象检测 3方法3.1LAE(轻量级自适应提取&#xff09;3.2MSFM(多路径…

GESP等级考试C++二级-switch...case的用法

在《GESP等级考试C二级if语句》中提到&#xff0c;可以使用if...else if...else语句来处理多种可能的情况。在C中&#xff0c;使用switch...case语句也可以来处理多种可能。 1 switch...case语句的格式 switch...case语句的格式如图1所示。 图1 switch...case语句的格式 其中…

鸿蒙开发(NEXT/API 12)【基础功能(使用剪贴板进行复制粘贴)】剪贴板服务

场景介绍 [剪贴板]为开发者提供数据的复制粘贴能力。 当需要使用复制粘贴等功能时&#xff0c;例如&#xff1a;复制文字内容到备忘录中粘贴&#xff0c;复制图库照片到文件管理粘贴&#xff0c;就可以通过剪贴板来完成。 约束限制 剪贴板内容大小<128MB。为保证剪贴板数…

【TabBar嵌套Navigation案例-产品推荐页面-UICollectionView-结合xib使用 Objective-C语言】

一、接下来,我们来说这个产品推荐页面 1.首先呢,它是一个CollectionViewController,当我点击这个产品推荐的时候, 这个Cell的时候,我要跳到一个CollectionViewController, 所以呢,我们需要先找到产品推荐,然后给它去添加一个targetVC,然后给它push到一个产品推荐的页面…

AI大模型的前十岗位薪资,谁还说读书没用?零基础入门到精通,收藏这一篇就够了

1. AI系统架构师 薪资范围&#xff1a;100万 - 200万/年 职位要求&#xff1a;需要具备全面的技术背景&#xff0c;精通系统架构设计&#xff0c;能够有效整合AI技术&#xff0c;提升系统性能。要求硕士及以上学历&#xff0c;计算机科学或相关专业背景。 目标院校&#xff1…

使用Conda配置python环境到Pycharm------Window小白版

使用Conda配置python环境到Pycharm 一、Conda安装和环境配置1.1 安装Conda软件1.2 判断是否安装成功1.3 创建Conda虚拟环境 二、 pycharm的安装2.1 Pycharm使用手册2.2 安装pycharm 三、 pycharm导入Conda环境 一、Conda安装和环境配置 anaconda官网 1.1 安装Conda软件 运行…

如何装修阿里巴巴国内1688平台淡入淡出效果首页特效1688店铺装修模板旺铺装修阿里店铺首页怎么装修全阿里

1688运营1688批发首页1688装修模板1688店铺怎么装修模板自定义装修代码1688店铺装修模板旺铺装修阿里店铺首页怎么装修1688店铺装修教程视频全屏通栏代码1688店铺装修模板阿里巴巴店铺装修设计 如何装修阿里巴巴国内1688平台淡入淡出效果首页特效1688店铺装修模板旺铺装修阿里店…

Actions Speak Louder than Words Meta史诗级的端到端推荐大模型落地

发现好久之前整理的推荐系统被遗忘在了草稿箱&#xff0c;让它出来见见世面。。。后续空了持续更新 1.Background 大模型生成用于推荐场景有如下几个难点&#xff1a; 特征缺乏显式结构。存在sparse和dense特征&#xff0c;其中sparse特征指的是一些离散特征&#xff0c;这部…

不再错过任何一个区块!用Node.js + WebSocket轻松实现区块链实时监控

文章目录 前言一、WebSocket是什么&#xff1f;二、项目结构三、代码实现1. 后端实现2. 前端实现 四、启动项目总结 前言 随着区块链技术的发展&#xff0c;实时监控区块链网络中的区块和交易信息变得越来越重要。无论是开发去中心化应用&#xff08;DApp&#xff09;&#xf…

shell脚本(2)

作业&#xff1a; 1.统计家目录下.c文件个数 #!/bin/bash num0 for file in ls ~/*.c do((num)) done echo "家目录中.c文件数:$num" 2定义一个稀疏数组&#xff08;下标不连续&#xff09;&#xff0c;写一个函数求稀疏数组中的和&#xff0c;要求稀疏数组中的数…

p18 docker镜像原理之联合文件系统,p19 docker镜像分层的理解

镜像是什么 镜像其实就是一种轻量级的&#xff0c;可执行的一种软件包&#xff0c;用来打包基于环境开发的软件&#xff0c;里面可以包括代码&#xff0c;环境&#xff0c;数据库&#xff0c;配置文件等信息 如何得到镜像&#xff1f; 可以从镜像仓库下载比方说dockerhub 比…

10种数据库技术的发展历程与现状

数据库是互联网的基石&#xff0c;存储着海量信息&#xff0c;使信息可被高效地组织、检索和分享。没有数据库&#xff0c;网站无法记忆用户数据&#xff0c;应用无法提供个性化服务&#xff0c;信息交流将失去智能与连贯性。因此&#xff0c;数据库技术极大地推动了互联网的发…

多态的使用和原理(c++详解)

一、多态的概念 多态顾名思义就是多种形态&#xff0c;它分为编译时的多态&#xff08;静态多态&#xff09;和运行时的多态&#xff08;动态多态&#xff09;&#xff0c;编译时多态&#xff08;静态多态&#xff09;就是函数重载&#xff0c;模板等&#xff0c;通过不同的参数…

《论软件系统架构风格》写作框架,软考高级系统架构设计师

论文真题 系统架构风格&#xff08;System Architecture Style&#xff09;是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义了一个词汇表和一组约束&#xff0c;词汇表中包含一些构件和连接件类型&#xff0c;而这组约束指出系统是如何将这些构件和连接件组合起…

深度学习训练中的三种网络:监督、半监督和无监督的联系与区别

深度学习训练中&#xff0c;根据训练数据是否有标签&#xff0c;可以将网络分为三大类&#xff1a;监督学习、半监督学习和无监督学习。 目录 一、监督学习网络1.1 特点1.2 典型任务1.3 举例 二、半监督学习网络2.1 特点2.2 典型任务2.3 举例 三、无监督学习网络3.1 特点3.2 典…

两倍多的程序员,不等于两倍多的代码

两倍多的工程师&#xff0c;并不会交付两倍多的代码。为什么很多老板就是想不明白这道理呢&#xff1f;今天这篇文章&#xff0c;咱们就讨论下这事情。 有时候&#xff0c;两件不相关的事情通过一件事情联系起来后&#xff0c;会让我们产生一些非理性想法&#xff0c;甚至相信…

Python自动化-操作Excel

在数据处理和报表生成过程中&#xff0c;Excel是一个经常使用的工具。Python中的openpyxl库可以让您通过编程方式读取、写入和操作Excel文件&#xff0c;从而实现自动化的数据处理和报表生成。本文将介绍openpyxl库的基本用法和常见操作&#xff0c;帮助您快速上手使用Python处…