- 在ui界面里,右侧文件树,将部件的名字改为各自的对应操作名称,如saveAction,openAction,saveAsAction,exitAction等,方便编程.
- 文件中定义了一个全局变量
QfileName
,用于保存文件名,在save 和saveAs操作时,如果QfileName已经有值,则save时不需要新建文件,否则后台需要新建一个文件,并命名为QfileName的内容。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFile>
#include <QDir>
#include <QTextStream>
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle("Untitled---myy");
QObject::connect(ui->newAction,SIGNAL(triggered()),this,SLOT(callActionSlot()));
QObject::connect(ui->openAction,SIGNAL(triggered()),this,SLOT(openActionSlot()));
QObject::connect(ui->saveAsAction,SIGNAL(triggered()),this,SLOT(saveAsActionSlot()));
QObject::connect(ui->saveAction,SIGNAL(triggered()),this,SLOT(saveActionSlot()));
QObject::connect(ui->exitAction,SIGNAL(triggered()),this,SLOT(close()));
}
void MainWindow::callActionSlot()
{
if(ui->textEdit->document()->isModified())
{
ui->textEdit->clear();
this->setWindowTitle("Has been edited");
}
else {
}
}
void MainWindow::openActionSlot()
{
QfileName=QFileDialog::getOpenFileName(this,"Open File",QDir::currentPath());
qDebug()<<QfileName;
if(QfileName.isEmpty())
{
QMessageBox::information(this,"Error","Plese input a file");
return;
}
else {
QFile *file=new QFile;
file->setFileName(QfileName);
bool ok=file->open(QIODevice::ReadOnly);
if(ok)
{
QTextStream in(file);
ui->textEdit->setText(in.readAll());
file->close();
this->setWindowTitle(QfileName);
delete file;
}
else {
QMessageBox::information(this,"Error","file Error!");
}
}
}
void MainWindow::saveActionSlot()
{
if(QfileName.isEmpty())
{
this->saveAsActionSlot();
}
else{
QFile *file=new QFile;
file->setFileName(QfileName);
bool ok=file->open(QIODevice::WriteOnly);
if(ok)
{
QTextStream out(file);
out<<ui->textEdit->toPlainText();
file->close();
delete file;
}
else {
QMessageBox::information(this,"Open Error!","Can not open this file!");
}
}
}
void MainWindow::saveAsActionSlot()
{
QfileName=QFileDialog::getSaveFileName(this,"Save File",QDir::currentPath());
if(QfileName.isEmpty())
{
QMessageBox::information(this,"Error!","Input a name!");
}
else {
QFile *file=new QFile;
file->setFileName(QfileName);
bool ok=file->open(QIODevice::WriteOnly);
if(ok)
{
QTextStream out(file);
out<<ui->textEdit->toPlainText();
file->close();
this->setWindowTitle(QfileName);
delete file;
}
else {
QMessageBox::warning(this,"waring!","File Open Error!");
}
}
}
MainWindow::~MainWindow()
{
delete ui;
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
#include <QMessageBox>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void callActionSlot();
void openActionSlot();
void saveAsActionSlot();
void saveActionSlot();
private:
Ui::MainWindow *ui;
QString QfileName;
};
#endif