Qt——文件操作

发布于:2025-08-20 ⋅ 阅读:(20) ⋅ 点赞:(0)

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_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() 获取文件创建时间、修改时间、最近访问时间等;

例如:

#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);  // 文件创建时间
}

网站公告

今日签到

点亮在社区的每一天
去签到