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