当前位置: 首页 > 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.xdnf.cn/news/1329895.html

相关文章:

  • word如何转换为pdf
  • 关于物理世界、感知世界、认知世界与符号世界统一信息结构的跨领域探索
  • 算法——快速幂
  • mycat分库分表实验
  • iOS App 混淆工具实战,教育培训类 App 的安全保护方案
  • [激光原理与应用-308]:光学设计 - 266皮秒深紫外激光器设计图纸示例解析(基于工程实现与专利技术)
  • 网络聚合链路与软件网桥配置指南
  • 从一个ctf题中学到的多种php disable_functions bypass 姿势
  • CNN 在故障诊断中的应用:原理、案例与优势
  • 机器人控制基础:串级 PID 和模糊 PID介绍与对比(干货总结)
  • Transformer十问
  • java17学习笔记-Deprecate the Applet API for Removal
  • LCC-LCC谐振式无线充电系统控制技术研究的复现
  • 期权小故事:王安石变法与期权
  • 前端本地模糊搜索1.0 按照匹配位置加权
  • 土地财政历史探寻
  • Diamond开发经验(1)
  • RabbitMQ:SpringAMQP Direct Exchange(直连型交换机)
  • 走进数字时代,融入数字生活,构建数字生态
  • Arthas 全面使用指南:离线安装 + Docker/K8s 集成 + 集中管理
  • 开源 C++ QT Widget 开发(一)工程文件结构
  • 猫头虎AI分享|字节开源了一款具备长期记忆能力的多模态智能体:M3-Agent 下载、安装、配置、部署教程
  • Java NIO 核心精讲(上):Channel、Buffer、Selector 详解与 ByteBuffer 完全指南
  • Python量化交易:结合爬虫与TA-Lib技术指标分析
  • Vue2.x核心技术与实战(二)
  • 力扣hot100:三数之和(排序 + 双指针法)(15)
  • Android Cordova 开发 - Cordova 嵌入 Android
  • 谷歌为什么要将Android的页面大小(Page Size)从传统的4KB升级至16KB
  • Android RxJava数据库操作:响应式改造实践
  • Android-ContentProvider的跨应用通信学习总结