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) 保存到文件。

相关推荐
岁忧1 小时前
(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
java·c++·算法·leetcode·面试·go
Nejosi_念旧2 小时前
解读 Go 中的 constraints包
后端·golang·go
风无雨2 小时前
GO 启动 简单服务
开发语言·后端·golang
小明的小名叫小明2 小时前
Go从入门到精通(19)-协程(goroutine)与通道(channel)
后端·golang
斯普信专业组2 小时前
Go语言包管理完全指南:从基础到最佳实践
开发语言·后端·golang
哈市雪花3 小时前
相机:以鼠标点为中心缩放(使用OpenGL+QT开发三维CAD)
qt·相机·opengl·cad·缩放·工业软件·渲染效果
一只叫煤球的猫4 小时前
【🤣离谱整活】我写了一篇程序员掉进 Java 异世界的短篇小说
java·后端·程序员
你的人类朋友5 小时前
🫏光速入门cURL
前端·后端·程序员
蜉蝣之翼❉6 小时前
CRT 不同会导致 fopen 地址不同
c++·mfc
aramae6 小时前
C++ -- STL -- vector
开发语言·c++·笔记·后端·visual studio