Qt——文件操作

QFile

相关成员方法:

构造:

cpp 复制代码
QFile::QFile(const QString &name)

打开:

cpp 复制代码
[since 6.3] bool QFile::open(QIODeviceBase::OpenMode mode, QFileDevice::Permissions permissions)

OpenMode:

Permissinos:

读:

cpp 复制代码
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()

写:

cpp 复制代码
qint64 QIODevice::write(const char *data, qint64 maxSize)

qint64 QIODevice::write(const char *data)

qint64 QIODevice::write(const QByteArray &data)

关闭:

cpp 复制代码
[virtual] void QIODevice::close()

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

cpp 复制代码
// 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 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() 获取文件创建时间、修改时间、最近访问时间等;

例如:

cpp 复制代码
#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);  // 文件创建时间
}
相关推荐
茉莉玫瑰花茶几秒前
Qt 界面优化 --- 绘图
开发语言·数据库·qt
掘根3 分钟前
【Qt】容器类控件——QTabWidget
开发语言·qt
hqwest8 分钟前
QT肝8天07--连接数据库
开发语言·数据库·c++·qt·sqlite·上位机·qt开发
WaWaJie_Ngen11 分钟前
LevOJ P2080 炼金铺 II [矩阵解法]
c++·线性代数·算法·矩阵
姝孟35 分钟前
笔记(C++篇)—— Day 12(类的默认成员函数)
c++·笔记·学习
ManThink Technology41 分钟前
实用的LoRaWAN 应用层协议规范
开发语言·php
敲代码的嘎仔1 小时前
牛客算法基础noob59 简写单词
java·开发语言·数据结构·程序人生·算法·leetcode·学习方法
catchadmin1 小时前
如何在 PHP 升级不踩坑?学会通过阅读 RFC 提前预知版本变化
开发语言·后端·php
tpoog1 小时前
[C++项目组件]Elasticsearch简单介绍
开发语言·c++·elasticsearch
特立独行的猫a3 小时前
C 语言各种指针详解
java·c语言·开发语言