文件操作
打开文件
在 Qt 中可以调用如下界面打开文件, 其调用 QFileDialog 下的函数打开文件并且返回文件名。

其中,调用该窗口需要使用如下方法:
QFileDialog::getOpenFileName();
这个方法有四个参数
- 该窗口的父类对象
- 该窗口标题
- 默认打开的文件目录
- 过滤的文件类型
示例
判断是否打开文件 |
---|
| // fileName: getOpenFileName 返回打开文件的文件名, 如果未打开文件则返回结果为空
// QCoreApplication::applicationFilePath(): 这个方法可以返回程序执行目录 (当前目录)
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QCoreApplication::applicationFilePath(), "*.cpp");
// 判断字符串是否为空
// 判断是否打开了文件
if (fileName.isEmpty()){
// 弹出警告框
QMessageBox::warning(this, "WARNING", "Please select File");
}
|
当确定了需要打开的文件后, 即可对对应的文件进行操作。
保存文件
保存文件使用如下的方法:
QFileDialog::getSaveFileName();
该方法的使用与 QFileDialog::getOpenFileName();
大致相同
示例
| // 保存文件
void MainWindow::saveActionSlot(){
QString fileName = QFileDialog::getSaveFileName(this, "选择保存位置", QCoreApplication::applicationFilePath());
// 判断返回是否为空
if (fileName.isEmpty()){
QMessageBox::warning(this, "警告", "请选择一个文件");
}else{
QFile file(fileName);
// 以只写的方式打开文件
file.open(QIODevice::WriteOnly);
// 读取文本框内容写入 ba 缓存
QByteArray ba;
ba.append(ui->textEdit->toPlainText());
file.write(ba);
file.close();
}
}
|
示例代码
mainwindow.h |
---|
| #ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFileDialog>
#include <QMessageBox>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void newActionSlot ();
void openActionSlot ();
void saveActionSlot ();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
|
main.cpp |
---|
| #include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
|
mainwindow.cpp |
---|
| #include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle("MASLiteEdit 文本编辑器 by JRNitre");
// 连接 新建文件 命令至槽函数
connect(ui->Newfile_Action, &QAction::triggered, this, &MainWindow::newActionSlot);
// 连接 打开文件 命令至槽函数
connect(ui->Open_Action, &QAction::triggered, this, &MainWindow::openActionSlot);
// 连接 另存为 命令至槽函数
connect(ui->Save_Action, &QAction::triggered, this, &MainWindow::saveActionSlot);
}
// 打开文件
void MainWindow::openActionSlot(){
// 调用文件资源浏览器
QString fileName = QFileDialog::getOpenFileName(this, tr("打开一个文件"), QCoreApplication::applicationFilePath(), "*.txt");
// 判断字符串是否为空
// 判断是否打开了文件
if (fileName.isEmpty()){
// 弹出警告框
// QMessageBox::warning(this, "警告", "请打开文件");
return;
}
else{
// 构造文件对象
QFile file(fileName);
// 打开文件 (只读)
file.open(QIODevice::ReadOnly);
// 读取数据至 ba
QByteArray ba = file.readAll();
// 显示读取到的数据
ui->textEdit->setText(QString(ba));
// 将文件名显示至标题
int index = fileName.lastIndexOf('/');
this->setWindowTitle(fileName.mid(index + 1));
// 关闭文件
file.close();
}
}
// 新建文本文档
void MainWindow::newActionSlot(){
ui->textEdit->clear();
this->setWindowTitle("New File.txt");
}
// 保存文件
void MainWindow::saveActionSlot(){
QString fileName = QFileDialog::getSaveFileName(this, "选择保存位置", QCoreApplication::applicationFilePath());
if (fileName.isEmpty()){
QMessageBox::warning(this, "警告", "请选择一个文件");
}else{
QFile file(fileName);
// 以只写的方式打开文件
file.open(QIODevice::WriteOnly);
// 读取文本框内容写入 ba 缓存
QByteArray ba;
ba.append(ui->textEdit->toPlainText());
file.write(ba);
file.close();
}
}
MainWindow::~MainWindow()
{
delete ui;
}
|