当前位置: 首页 > news >正文

Qt——文件操作

QFile

在这里插入图片描述

相关成员方法:

构造:

QFile::QFile(const QString &name)

打开:

[since 6.3] bool QFile::open(QIODeviceBase::OpenMode mode, QFileDevice::Permissions permissions)

OpenMode:

在这里插入图片描述

Permissinos:

在这里插入图片描述

读:

qint64 QIODevice::read(char *data, qint64 maxSize)QByteArray QIODevice::read(qint64 maxSize)qint64 QIODevice::readLine(char *data, qint64 maxSize)QByteArray QIODevice::readLine(qint64 maxSize = 0)QByteArray QIODevice::readAll()

写:

qint64 QIODevice::write(const char *data, qint64 maxSize)qint64 QIODevice::write(const char *data)qint64 QIODevice::write(const QByteArray &data)

关闭:

[virtual] void QIODevice::close()

例如:制作一个简易的记事本

// mainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPlainTextEdit>QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();void saveHandler();void openHandler();void fontHandler();private:Ui::MainWindow *ui;QPlainTextEdit *plain_text_edit_ = nullptr;
};
#endif  // MAINWINDOW_H// mainWindow.cpp
#include "mainwindow.h"#include <QDebug>
#include <QFileDialog>
#include <QFontDialog>#include "./ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);this->setWindowTitle("记事本");// 获取菜单栏QMenuBar* menuBar = this->menuBar();// 添加菜单QMenu* menu = new QMenu("文件 (&F)");menuBar->addMenu(menu);// 添加菜单项QAction* act1 = new QAction("Open");QAction* act2 = new QAction("Save");QAction* act3 = new QAction("Font");act1->setShortcut(Qt::CTRL | Qt::Key_O);act2->setShortcut(Qt::CTRL | Qt::Key_S);act3->setShortcut(Qt::CTRL | Qt::Key_F);menu->addAction(act1);menu->addAction(act2);menuBar->addAction(act3);// 向主窗口添加纯文本编辑器plain_text_edit_ = new QPlainTextEdit();this->setCentralWidget(plain_text_edit_);// 给保存和打开菜单项关联信号槽connect(act1, &QAction::triggered, this, &MainWindow::openHandler);connect(act2, &QAction::triggered, this, &MainWindow::saveHandler);connect(act3, &QAction::triggered, this, &MainWindow::fontHandler);
}MainWindow::~MainWindow() { delete ui; }void MainWindow::openHandler() {QString path = QFileDialog::getOpenFileName(this);QFile file(path);if (!file.open(QIODeviceBase::ReadOnly)) {qDebug() << path << " 打开失败";return;}// 获取状态栏QStatusBar* statusBar = this->statusBar();statusBar->showMessage(path);QString text = file.readAll();plain_text_edit_->setPlainText(text);file.close();
}void MainWindow::saveHandler() {QString path = QFileDialog::getSaveFileName(this);QFile file(path);if (!file.open(QIODeviceBase::WriteOnly)) {qDebug() << path << " 打开失败";return;}QStatusBar* statusBar = this->statusBar();statusBar->showMessage(path);QString text = plain_text_edit_->toPlainText();file.write(text.toUtf8());file.close();
}void MainWindow::fontHandler() {bool ok = false;QFont font = QFontDialog::getFont(&ok);if (ok) {plain_text_edit_->setFont(font);}
}

FileInfo 文件目录信息类

通过这个类,我们可以获取到文件的相关属性。

常用的方法有:

  • isDir() 检查该文件是否是目录;
  • isExecutable() 检查该文件是否是可执行文件;
  • fileName() 获得文件名;
  • completeBaseName() 获取完整的文件名;
  • suffix() 获取文件后缀名;
  • completeSuffix() 获取完整的文件后缀;
  • size() 获取文件大小;
  • isFile() 判断是否为文件;
  • fileTime() 获取文件创建时间、修改时间、最近访问时间等;

例如:

#include "widget.h"#include <QDebug>
#include <QFileDialog>
#include <QFileInfo>#include "./ui_widget.h"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 info(path);qDebug() << info.isFile()                               // 是否为文件<< info.isDir()                                // 是否为目录<< info.isExecutable()                         // 是否为可执行程序<< info.size()                                 // 文件大小<< info.fileName()                             // 文件名称<< info.fileTime(QFileDevice::FileBirthTime);  // 文件创建时间
}
http://www.lryc.cn/news/625480.html

相关文章:

  • Qt原对象系统工作机制
  • 基于 PyTorch 模型训练优化、FastAPI 跨域配置与 Vue 响应式交互的手写数字识别
  • SpreadJS 协同服务器 MongoDB 数据库适配支持
  • JavaSSM框架从入门到精通!第二天(MyBatis(一))!
  • EasyExcel 合并单元格最佳实践:基于注解的自动合并与样式控制
  • AI硬件英伟达选购的建议。
  • SSH 使用密钥登录服务器
  • 服务器无公网ip如何对外提供服务?本地网络只有内网IP,如何能被外网访问?
  • Netty内存池中ChunkList详解
  • 库卡机器人tag焊接保护气体流量控制系统
  • 基于SpringBoot的停车场管理系统【2026最新】
  • 在Ubuntu上安装并使用Vue2的基本教程
  • ComfyUI部署Wan2.2,开放API,文生视频与图生视频
  • Diamond开发经验(1)
  • Unity进阶--C#补充知识点--【C#各版本的新功能新语法】C#1~4与C#5
  • 【科研绘图系列】R语言绘制多组火山图
  • 腾讯混元3D系列开源模型:从工业级到移动端的本地部署
  • Java:枚举的使用
  • arcgis-空间矫正工具(将下发数据A的信息放置原始数据B的原始信息并放置到成果数据C中,主要按下发数据A的范围)
  • Android-ContentProvider的跨应用通信学习总结
  • IPD流程执行检查表
  • Java高级面试实战:Spring Boot微服务与Redis缓存整合案例解析
  • 我的SSM框架自学3
  • 《C++进阶之STL》【二叉搜索树】
  • Vulkan笔记(七)---图像视图
  • Mac(七)右键新建文件的救世主 iRightMouse
  • 前沿技术借鉴研讨-2025.8.19 (信号提取、信号拆分、胎心诊断)
  • C++---为什么迭代器常用auto类型?
  • Flink on Native K8S安装部署
  • Typescript入门-对象讲解