当前位置: 首页 > 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.dtcms.com/a/338662.html

相关文章:

  • Vercel v0 iOS版重磅发布:AI驱动的移动开发新篇章
  • SWMM排水管网水力、水质建模及在海绵与水环境中的应用
  • 纯Qt结合ffmpeg实现本地摄像头采集/桌面采集/应用程序窗口采集/指定采集帧率和分辨率等
  • 数据仓库OLTPOLAP维度讲解
  • Qt事件处理机制详解
  • [激光原理与应用-308]:光学设计 - 266皮秒深紫外激光器设计图纸示例解析(基于工程实现与专利技术)
  • 《C++进阶之STL》【二叉搜索树】
  • 11.Ansible自动化之-内容集管理
  • 云原生俱乐部-shell知识点归纳(1)
  • MFC,C++,海康SDK,回调,轮询
  • 借助AI将infoNES移植到HarmonyOS平台的详细方案介绍
  • “道法术器” 思维:解析华为数字化转型
  • Springboot使用Selenium+ChormeDriver在服务器(Linux)端将网页保存为图片或PDF
  • 如何在未来进一步推动NLP技术的发展?
  • Java高级面试实战:Spring Boot微服务与Redis缓存整合案例解析
  • 【牛客刷题】岛屿数量问题:BFS与DFS解法深度解析
  • 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第二十六讲)
  • 控制对文件的访问:Linux 文件系统权限管理总结
  • 基于VLM 的机器人操作视觉-语言-动作模型:综述 2
  • JavaSSM框架从入门到精通!第二天(MyBatis(一))!
  • 走进数字时代,融入数字生活,构建数字生态
  • 可以一键生成PPT的AI PPT工具(最新整理)
  • Flink Checkpoint 原理深度剖析与作用讲解(flink面试高频问题)
  • 在Ubuntu上安装并使用Vue2的基本教程
  • Flink Stream API - 源码二开详细实现
  • 测试 Next.js 应用:工具与策略
  • React Native 与 UniApp 对比
  • React native Navigation 详解
  • npm下的scratch(少儿编程篇)
  • 接口自动化测试持续集成CI/CD(Jenkins)