实现文件编辑器代码
目录
一、代码要点
二、重点函数
1、conncet
2、getOpenFileName
3、getSaveFileName
4、读取文件到textEdit
5、textEdit保存到文件
三、全部代码
mainwindow.h
mainwindow.cpp
一、代码要点
- MainWindow的菜单栏实现;
- connect函数连接信号与槽;如何实现选择一个文件的窗口QFileDialog,getOpenFileName和getSaveFileName;
- 文件的读写,创建QFile对象、打开、读写、关闭。
二、重点函数
1、conncet
connect(ui->newAction,&QAction::triggered,this,&MainWindow::newActionSlot);
谁发出信号,发出什么信号,谁处理信号,处理什么信号
这里newActionSlot槽函数需要自己构建
void MainWindow::newActionSlot()
{
ui->textEdit->clear();
this->setWindowTitle("新建文本文档.txt");
}
2、getOpenFileName
- 打开一个文件
QString fileName = QFileDialog::getOpenFileName(this, "选择一个文件",
QCoreApplication::applicationFilePath(),
"*.cpp");//this是打开窗口的对话框的父类对象,第二个参数是打开窗口的title
//第三个是打开窗口的默认路径,这里获取当前路径
//第四个参数,只显示.cpp的文件
3、getSaveFileName
- 保存一个文件(参数和getOpenFileName 是一样的)
QString fileName=QFileDialog::getSaveFileName
(this,"选择一个文件",::applicationFilePath());
//没有第四个参数,会显示所有文件
4、读取文件到textEdit
QFile file(fileName);//创建文件对象
file.open(QIODevice::ReadOnly);
QByteArray ba = file.readAll();
ui->textEdit->setText(QString(ba));
file.close();
5、textEdit保存到文件
QFile file(fileName);
file.open(QIODevice::WriteOnly);
QByteArray ba;
ba.append( ui->textEdit->toPlainText());//QString转QByteArray
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
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle("编辑器");
this->setWindowIcon(QIcon("D:\\Qt\\Qt-Learn-File\\QtOnline\\MyNoteBook\\icon.png"));
connect(ui->newAction,&QAction::triggered,this,&MainWindow::newActionSlot);
connect(ui->openAction,&QAction::triggered,this,&MainWindow::openActionSlot);
connect(ui->saveAction,&QAction::triggered,this,&MainWindow::saveActionSlot);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::newActionSlot()
{
ui->textEdit->clear();
this->setWindowTitle("新建文本文档.txt");
}
void MainWindow::openActionSlot()
{
QString fileName = QFileDialog::getOpenFileName(this, "选择一个文件",
QCoreApplication::applicationFilePath(),
"*.cpp");//this是打开窗口的对话框的父类对象,第二个参数是打开窗口的title
//第三个是打开窗口的默认路径,这里获取当前路径
//第四个参数,只显示.cpp的文件
if(fileName.isEmpty())
{
QMessageBox::warning(this,"警告"," 请选择一个文件!");
}
else
{
// qDebug()<<fileName;
QFile file(fileName);//创建文件对象
file.open(QIODevice::ReadOnly);
QByteArray ba = file.readAll();
ui->textEdit->setText(QString(ba));
file.close();
}
}
void MainWindow::saveActionSlot()
{
QString fileName=QFileDialog::getSaveFileName(this,"选择一个文件",
QCoreApplication::applicationFilePath()
);//没有第四个参数,会显示所有文件
if(fileName.isEmpty())
{
QMessageBox::warning(this,"警告","请选择一个文件");
}
else
{
QFile file(fileName);
file.open(QIODevice::WriteOnly);
QByteArray ba;
ba.append( ui->textEdit->toPlainText());//QString转QByteArray
file.write(ba);
file.close();
}
}