8.Qt文件操作

1.设置布局

1.1选择Text Edit点击垂直布局

1.2 输入文件(&F)

1.3补全文件

1.4补全菜单栏

按下SHIFT+ALT+R可以查看预览图

1.5menubar整个界面,menu菜单栏,action菜单栏下面的功能

将新建改成newAction,打开改成openAction,另存为改成saveAction

2.实现按钮功能

2.1实现newAction功能

(1) mainwindow.h

js 复制代码
private slots:
    void newActionSlot();

(2) mainwindow.cpp

js 复制代码
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    connect(ui->newAction, &QAction::triggered, this, &MainWindow::newActionSlot);
}


void MainWindow::newActionSlot()
{
    ui->textEdit->clear();
    this->setWindowTitle("新建文本文档.txt");
}

(3) connect连接

参数 说明
ui->newAction 信号发送者(QAction 对象)
&QAction::triggered 信号(QAction 被点击时发出)
this 接收信号的对象(当前窗口)
&MainWindow::newActionSlot 槽函数(点击后执行的函数)

(4) newActionSlot()槽函数

  • ui->textEdit 是界面上的一个文本框(由 Qt Designer 设计)。
  • this 指代当前 MainWindow 对象。

2.2实现openAction功能

(1) Qt文档

(2) Qt代码

js 复制代码
QStringList files = QFileDialog::getOpenFileNames(
                        this,
                        "Select one or more files to open",
                        "/home",
                        "Images (*.png *.xpm *.jpg)");

(3) mainwindow.h

js 复制代码
private slots:
    void openActionSlot();

(4) mainwindow.cpp

js 复制代码
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

connect(ui->openAction, &QAction::triggered, this, &MainWindow::openActionSlot);
}


void MainWindow::openActionSlot()
{
    // 1. 弹出文件选择对话框,限定打开 `.cpp` 文件
    QString fileName = QFileDialog::getOpenFileName(
        this, 
        "打开", 
        QCoreApplication::applicationFilePath(), 
        "*.cpp"
    );

    // 2. 检查用户是否取消了文件选择
    if (fileName.isEmpty()) {
        QMessageBox::warning(this, "警告", "Please select a file");
    } 
    
    // 3. 如果选择了文件,读取内容并显示在 textEdit 中
    else {
        QFile file(fileName);      // 创建 QFile 对象
        file.open(QIODevice::ReadOnly);  // 以只读模式打开文件
        QByteArray ba = file.readAll();  // 读取全部内容到 QByteArray
        ui->textEdit->setText(QString(ba));  // 转为 QString 并显示在 textEdit
        file.close();  // 关闭文件
    }
}

(5) connect连接

参数 说明
ui->openAction 信号发送者(界面中的 QAction 对象)
&QAction::triggered 信号(当用户点击该动作时触发)
this 接收信号的对象(当前 MainWindow 窗口)
&MainWindow::openActionSlot 槽函数(点击后调用的函数)

(6) 弹出文件选择对话框

使用 QFileDialog::getOpenFileName() 让用户选择文件。

参数说明:

this:父窗口(当前窗口)。

"打开":对话框标题。

QCoreApplication::applicationFilePath():默认打开的目录(程序所在路径)。

"*.cpp":文件过滤器(仅显示 .cpp 文件)。

(7) 检查用户是否取消选择

如果 fileName.isEmpty()true,说明用户点了"取消",弹出警告提示。

(8) 读取文件并显示

使用 QFile 打开文件,读取全部内容到 QByteArray

QByteArray 转为 QString,并设置到 ui->textEdit 显示。

2.3实现saveAction功能

(1) mainwindow.h

js 复制代码
private slots:
    void saveActionSlot();

(2) mainwindow.cpp

js 复制代码
void MainWindow::saveActionSlot()
{
    // 1. 弹出保存文件对话框
    QString fileName = QFileDialog::getSaveFileName(
        this, 
        "打开",  // 对话框标题(建议改为"保存"更贴切)
        QCoreApplication::applicationFilePath()  // 默认保存路径(程序所在目录)
    );

    // 2. 检查用户是否取消保存
    if (fileName.isEmpty()) {
        QMessageBox::warning(this, "警告", "Please select a file");
    } 
    
    // 3. 保存文件
    else {
        QFile file(fileName);          // 创建文件对象
        file.open(QIODevice::WriteOnly); // 以只写模式打开
        QByteArray ba;                 
        ba.append(ui->textEdit->toPlainText()); // 将文本框内容转为字节流
        file.write(ba);                // 写入文件
        file.close();                  // 关闭文件
    }
}

(3)connect 函数

参数 说明
ui->saveAction 信号发送者(界面中的 QAction 对象)
&QAction::triggered 信号(用户点击时触发)
this 接收信号的对象(当前窗口)
&MainWindow::saveActionSlot 槽函数(点击后调用的保存逻辑)

(4) 弹出保存对话框

QFileDialog::getSaveFileName() 让用户选择保存路径和文件名。

参数说明:

this:父窗口。

"打开":建议改为 "保存" 更符合功能语义。

QCoreApplication::applicationFilePath():默认保存到程序所在目录。

(5) 检查用户是否取消

如果 fileName 为空(用户点了取消),弹出警告提示。

(6) 保存文件内容

textEdit 中的文本 (toPlainText()) 转为 QByteArray

以二进制写入模式 (QIODevice::WriteOnly) 保存到文件。

相关推荐
镜花水月linyi4 分钟前
1.5w字ReentrantLock 深度解析
java·后端·程序员
bot5556665 分钟前
企业微信iPad协议:从接口设计到灰度验证的极简实践
后端
CC.GG6 分钟前
【Qt】Qt初识
开发语言·qt
程序员西西8 分钟前
Spring Boot3 分页操作全解析:从基础到实战
java·后端·程序员
水天需01011 分钟前
VS Code C++ 环境配置及 HelloWorld 程序
c++
初圣魔门首席弟子12 分钟前
第六章、[特殊字符] HTTP 深度进阶:报文格式 + 服务器实现(从理论到代码)
linux·网络·c++
用户685453759776912 分钟前
为什么Python大神都在用with?看完我悟了
后端
mudtools12 分钟前
一分钟实现.NET与飞书长连接的WebSocket架构
后端·c#·.net
永远都不秃头的程序员(互关)15 分钟前
查找算法深入分析与实践:从线性查找到二分查找
数据结构·c++·算法
Sunsets_Red16 分钟前
二项式定理
java·c++·python·算法·数学建模·c#