#QT(MainWindow初尝---文本编辑器)

1.IDE:QTCreator


2.实验:使用MainWindow做一个文本编辑器


3.记录

(1)创建几个功能

(2)为几个功能写实现,这里不能使用转到槽,需要自己用connect函数关联。这里的功能是QAction类,退格搜查其槽函数来进行绑定

(3)打开文件操作,主要查看QFileDialog类说明还有QFile类说明,QFileDialog用于选取文件,QFile用于操作文件。

(4)文件操作基本流程:

a.通过QFileDialog得到文件名字

b.将得到的名字给QFile创建对象进行操作。

c.QFile打开创建的对象设置权限(只读,只写,读写)

d.QFile操作对象(read,write)

e.操作完毕(close)

(5)写入的数据期望为QByteArrary,如何将其转换为该类型使用append函数,具体查看类说明

cpp 复制代码
    bytearray.append(ui->textEdit->toPlainText());
    file.write(bytearray);

(6)对于文件保存,可以存储不同类型的文件,只需要自己添加后缀即可


4.代码

MainWindow.h

cpp 复制代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

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 CreateNewFile(void);    //创建新文件
    void Exit(void);         //退出
    void OpenFile(void);    //打开文件
    void SaveFile(void);   //保存文件
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

MainWindow.cpp

cpp 复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QFile>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    connect(ui->CreateFile,&QAction::triggered,this,&MainWindow::CreateNewFile);   //关联创建新文件函数s
    connect(ui->OpenFile,&QAction::triggered,this,&MainWindow::OpenFile);   //关联打开文件函数
    connect(ui->Exit,&QAction::triggered,this,&MainWindow::Exit);   //关联退出函数
    connect(ui->SaveFile,&QAction::triggered,this,&MainWindow::SaveFile);   //关联保存函数
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::CreateNewFile()    //创建新文件
{
    ui->textEdit->clear();
    this->setWindowTitle("新建文本.txt");
}

void MainWindow::Exit()    //退出
{
    this->close();
}

void MainWindow::OpenFile() //打开文件
{
    QString filename=QFileDialog::getOpenFileName(this,"选择打开的文件","C:/Users/***/Desktop/hook","*.*");     //打开文件夹,并且不筛选文件后缀
    QFile file(filename);
    file.open(QIODevice::ReadWrite);
    QByteArray filecontent=file.readAll();
    ui->textEdit->setText(filecontent);
    file.close();
    this->setWindowTitle(filename);
}

void MainWindow::SaveFile()  //保存文件
{
    QString savefilename=QFileDialog::getSaveFileName(this,"保存为","C:/Users/***/Desktop/hook/","*.*");
    QFile file(savefilename);
    file.open(QIODevice::WriteOnly);
    QByteArray bytearray;
    bytearray.append(ui->textEdit->toPlainText());
    file.write(bytearray);
    file.close();
    this->setWindowTitle(savefilename);
}
相关推荐
覆东流13 小时前
7.Java数组
java·开发语言·后端
码行山野赴时序归途13 小时前
三道经典数组题:从暴力到最优的算法思维
c语言·开发语言·数据结构·算法·leetcode
lzhdim14 小时前
提高 SQL 语句执行速度的方法
java·开发语言·数据库·sql·oracle
JavaPub-rodert14 小时前
王仕宇在 Go Context 如何解决协程泄漏与超时控制
开发语言·后端·golang·iphone·javapub·王仕宇
ly768915 小时前
JavaScript 从入门到进阶:核心语法、异步编程与工程化实践
开发语言·javascript·ecmascript
落魄大学生之流水线上谋生计16 小时前
Java锁全面指南:从基础概念到企业级应用
java·开发语言
for_ever_love__16 小时前
python基础语法学习: 闭包
开发语言·python·学习·闭包
ly768916 小时前
Python 全面入门:从核心语法到工程实践
开发语言·python
艾伦_耶格宇17 小时前
【AI】-4 OpenCode Go 接入 Obsidian 完整指南
运维·开发语言·人工智能·agent·opencode
旋生万物17 小时前
【终极实战】用Python从零“生成“一个宇宙:螺旋干涉模型的代码实现
开发语言·前端·人工智能·react.js·php·wpf