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);  // 文件创建时间
}
相关推荐
鲸屿19534 分钟前
python之socket网络编程
开发语言·网络·python
没有梦想的咸鱼185-1037-16631 小时前
基于R语言机器学习方法在生态经济学领域中的实践技术应用
开发语言·机器学习·数据分析·r语言
向上的车轮1 小时前
基于go语言的云原生TodoList Demo 项目,验证云原生核心特性
开发语言·云原生·golang
The Chosen One9851 小时前
C++ : AVL树-详解
开发语言·c++
zzyzxb2 小时前
std::enable_shared_from_this
c++
SNAKEpc121382 小时前
QML和Qt Quick
c++·qt
PH_modest2 小时前
【Qt跬步积累】—— 初识Qt
开发语言·qt
hansang_IR2 小时前
【题解】洛谷 P4286 [SHOI2008] 安全的航线 [递归分治]
c++·数学·算法·dfs·题解·向量·点积
GanGuaGua2 小时前
Linux系统:线程的互斥和安全
linux·运维·服务器·c语言·c++·安全
怀旧,2 小时前
【C++】18. 红⿊树实现
开发语言·c++