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