news 2026/9/29 21:31:05

Qt — Qt 文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qt — Qt 文件

目录

1. Qt 文件概述

2. 输入输出设备类

3. QFile 类的使用

3.1 打开 open

3.2 读 read / readLine / readAll

3.3 写 wirte

3.4 关闭 close

3.5 QFile 类的基本用法

4. 文件和目录信息


1. Qt 文件概述

⽂件操作是应⽤程序必不可少的部分。Qt 作为⼀个通⽤开发库,提供了跨平台的⽂件操作能⼒。 Qt提供了很多关于⽂件的类,通过这些类能够对⽂件系统进⾏操作,如⽂件读写、⽂件信息获取、文件复制或重命名等。

2. 输入输出设备类

在 Qt 中,⽂件读写的类为 QFile 。QFile 的⽗类为 QFileDevice ,QFileDevice 提供了⽂件交互操作的底层功能。 QFileDevice 的⽗类是 QIODevice,QIODevice 的⽗类为 QObject 。

QIODevice 是 Qt 中所有输⼊输出设备(input/output device,简称 I/O 设备)的基础类,I/O 设备就是能进⾏数据输⼊和输出的设备,例如⽂件是⼀种 I/O 设备,⽹络通信中的 socket 是 I/O 设备, 串⼝、蓝⽛等通信接⼝也是 I/O 设备,所以它们也是从 QIODevice 继承来的。Qt 中主要的⼀些 I/O 设备类的继承关系如下图所示:

3. QFile 类的使用

用 QFile 之前先使用构造函数完成文件对象的构造:

需要提供文件路径:绝对路径和相对路径都可以

3.1 打开 open

使用上面的两种方法,还需要C语言的API,比较麻烦

构造函数中,指定了路径之后,此时直接通过这个版本的 open 打开即可。

OpenMode mode:读方式 / 写方式 / 追加写 方式打开。

3.2 读 read / readLine / readAll

QByteArray 是可以很方便的转成 QString 的。

3.3 写 wirte

3.4 关闭 close

关闭本质上是要释放文件描述符表中的表项,文件描述符表存在上限。如果一直打开,不关闭的话,就可能会使文件描述符表被占满,后续再尝试打开,就打开不了了。

3.5 QFile 类的基本用法

// mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QPlainTextEdit> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); void handleAction1(); void handleAction2(); private: Ui::MainWindow *ui; QPlainTextEdit* edit; }; #endif // MAINWINDOW_H
// mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include <QFileDialog> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); this->setWindowTitle("简单的记事本"); // 获取到菜单栏 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(24); edit->setFont(font); this->setCentralWidget(edit); // 连接 QAction 的信号槽 connect(action1, &QAction::triggered, this,&MainWindow::handleAction1); connect(action2, &QAction::triggered, this,&MainWindow::handleAction2); } MainWindow::~MainWindow() { delete ui; } void MainWindow::handleAction1() { // 1. 先弹出 “打开文件” 对话框,让用户选择打开哪个文件 QString path = QFileDialog::getOpenFileName(this); // 2. 把文件名显示到状态中 QStatusBar* statusBar = this->statusBar(); statusBar->showMessage(path); // 3. 根据用户选择的路径,构造一个 QFile 对象,并打开文件 QFile file(path); bool ret = file.open(QIODevice::ReadOnly); if(!ret){ // 打开文件失败! statusBar->showMessage(path + "打开失败!"); } // 4. 读取文件 QString text = file.readAll(); // 需要确保打开的文件是一个文本文件才可以,如果是二进制文件,交给 QString 就不合适了 // 二进制文件,里面的内容存啥都行,没有限制,图片,可执行程序,视频,音频…… // 文本文件,里面的内容必须是合法字符(遵守utf8,gbk等编码方式) // 5.关闭文件!!! file.close(); // 6. 读到的内容设置到输入框中 edit->setPlainText(text); } void MainWindow::handleAction2() { // 1. 先弹出保存文件对话框 QString path = QFileDialog::getSaveFileName(); // 2. 在状态栏中显示这个文件名 QStatusBar* statusBar = this->statusBar(); statusBar->showMessage(path); // 3. 根据用户选择的路径,构造一个 QFile 对象,并打开文件 QFile file(path); bool ret = file.open(QIODevice::WriteOnly); if(!ret){ statusBar->showMessage(path + "打开失败!"); return; } // 4. 写文件 const QString& text = edit->toPlainText(); file.write(text.toUtf8()); // 5. 关闭文件 file.close(); }

运行:

保存文件操作:

确实在对应的路径下存在该文件:

打开文件操作:

4. 文件和目录信息

QFileInfo 是 Qt 提供的⼀个⽤于获取⽂件和⽬录信息的类,如获取⽂件名、⽂件大小、⽂件修改⽇期等。QFileInfo类中提供了很多的⽅法,常⽤的有:

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

运行:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 21:29:56

OpenClaw 3.13 发布:Chrome DevTools MCP 调试链路与 TaoToken 配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/29 21:28:16

HEVC(H.265) 相关网站资源汇总:TaoToken 统一 Key 接入 AI 工具配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/29 21:28:15

qwen3.8:27b 配 TaoToken:settings.json 骨架与报错排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华