main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QKeySequence>
#include<QIcon>
#include<QMessageBox>
#include<QFile>
#include<QFileDialog>
#include<QFileInfo>
#include<QDebug>
#include<QFontComboBox>
#include<QComboBox>
#include<QToolButton>
#include<QColorDialog>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void openReadFile();
private slots:
void newFileSlot();
void openFileSlot();
void saveFileSlot();
void saveasFileSlot();
void changeFontSlot(QFont font);
void changeSizeSlot(QString size);
void boldSlot(bool ok);
void colorSlot();
void italicSlot(bool ok);
void underSlot(bool ok);
private:
Ui::MainWindow *ui;
QString fileName;
QString filePath;
QFontComboBox *font;
};
#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);
fileName = "新文档.txt";
this->setWindowTitle("新文档.txt");
//给动作添加快捷键
ui->actionnew->setShortcut(QKeySequence(QKeySequence::New));
ui->actionopen->setShortcut(QKeySequence(QKeySequence::Open));
ui->actionsave->setShortcut(QKeySequence(QKeySequence::Save));
ui->actionsaves->setShortcut(QKeySequence(QKeySequence::SaveAs));
//给动作添加图标
ui->actionnew->setIcon(QIcon(":/icons/new.png"));
ui->actionopen->setIcon(QIcon(":/icons/open.png"));
ui->actionsave->setIcon(QIcon(":/icons/save.png"));
//新建文件,绑定槽函数和信号
connect(ui->actionnew,SIGNAL(triggered(bool)),this,SLOT(newFileSlot()));
//打开文件,绑定槽函数和信号
connect(ui->actionopen,SIGNAL(triggered(bool)),this,SLOT(openFileSlot()));
//保存文件,绑定槽函数和信号;
connect(ui->actionsave,SIGNAL(triggered(bool)),this,SLOT(saveFileSlot()));
//另存为文件,绑定槽函数和信号
connect(ui->actionsaves,SIGNAL(triggered(bool)),this,SLOT(saveasFileSlot()));
//将菜单栏的动作添加到工具栏
ui->mainToolBar->addAction(ui->actionnew);
ui->mainToolBar->addAction(ui->actionopen);
ui->mainToolBar->addAction(ui->actionsave);
//设置字体
font = new QFontComboBox(this);
ui->mainToolBar->addWidget(font);
connect(font,SIGNAL(currentFontChanged(QFont)),this,SLOT(changeFontSlot(QFont)));
//设置字体大小
QComboBox *size = new QComboBox(this);
ui->mainToolBar->addWidget(size);
QStringList list;
list<<"8"<<"9"<<"10"<<"11"<<"12"<<"13"<<"14"<<"16"<<"18"<<"20";
size->addItems(list);
connect(size,SIGNAL(currentTextChanged(QString)),this,SLOT(changeSizeSlot(QString)));
//设置颜色栏
QToolButton *clrBtn = new QToolButton(this);
ui->mainToolBar->addWidget(clrBtn);
clrBtn->setIcon(QIcon(":/icons/color.png"));
connect(clrBtn,SIGNAL(clicked(bool)),this,SLOT(colorSlot()));
//设置加粗字体
QToolButton *bold = new QToolButton(this);
ui->mainToolBar->addWidget(bold);
bold->setIcon(QIcon(":/icons/textbold.png"));
bold->setCheckable(true);
connect(bold,SIGNAL(clicked(bool)),this,SLOT(boldSlot(bool)));
//设置斜体字
QToolButton *italic = new QToolButton(this);
ui->mainToolBar->addWidget(italic);
italic->setIcon(QIcon(":/icons/textitalic.png"));
italic->setCheckable(true);
connect(italic,SIGNAL(clicked(bool)),this,SLOT(italicSlot(bool)));
//设置下划线
QToolButton *under = new QToolButton(this);
ui->mainToolBar->addWidget(under);
under->setIcon(QIcon(":/icons/textunder.png"));
under->setCheckable(true);
connect(under,SIGNAL(clicked(bool)),this,SLOT(underSlot(bool)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::newFileSlot()
{
//判断文件内容是否 被修改
if(true == ui->textEdit->document()->isModified())
{
//如果被修改,则弹出对话框,询问是否保存
int ret = QMessageBox::question(this,"保存","是否保存当前文档?",QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel);
//如果保存,则判断是否为无标题文件
if(QMessageBox::Yes == ret )
{
//另存为,并修改标题栏
if(fileName =="新文档.txt")
{
qDebug()<<"另存为!!";
saveasFileSlot();
}
else
{
//保存,并修改标题栏
saveFileSlot();
}
}
else if(QMessageBox::No ==ret)
{
fileName ="新文档.txt";
this->setWindowTitle("新文档.txt");
ui->textEdit->clear();
}else
{
return;
}
}
else
{
//如果内容没有被修改,则直接改标题。
fileName = "新文档.txt";
this->setWindowTitle("新文档.txt");
ui->textEdit->clear();
}
}
// 打开文件
void MainWindow:: openFileSlot()
{
//第一步,也需要先判断是否修改文件
if(true == ui->textEdit->document()->isModified())
{
//如果被修改,先弹出对话框
int ret = QMessageBox::question(this,"记事本","是否对修改的文件进行保存?",QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel);
if(QMessageBox::Yes == ret )
{
if(fileName=="新文档.txt"){
//另存为 并修改标题栏
qDebug()<<"另存为!";
saveasFileSlot();
}
else
{
//保存,
qDebug()<<"保存!";
//弹出打开对话框,修改标题烂,读文件到编辑区
openReadFile();
}
}
else if(QMessageBox::No == ret)
{
//直接打开文件
openReadFile();
}
else
{
return;
}
}
else
{
//如果没有修改当前文件。则直接打开文件
openReadFile();
}
}
//成员函数,打开并读文件,因为后面多次调用,所以在此单独实现
void MainWindow::openReadFile()
{
filePath = QFileDialog::getOpenFileName(this,"open","./","TXT(*.txt)");
if(false == filePath.isEmpty())
{
QFileInfo info(filePath);
fileName = info.fileName();
//更新标题栏
this->setWindowTitle(fileName);
//读文件内容到编辑区
//以只读方式打开文件
QFile file(filePath);
bool ok = file.open(QIODevice::ReadOnly);
if(true == ok)
{
//读文件
QByteArray arr = file.readAll();
//显示到编辑区
ui->textEdit->setText(QString(arr));
//关闭文件
file.close();
}
}
}
void MainWindow ::saveFileSlot()
{
//判断文件是否为无标题文件
if(fileName =="新文档.txt")
{
//另存为,
saveasFileSlot();
}
else
{
QFile file(filePath);
bool ok = file.open(QIODevice::WriteOnly);
if(true == ok)
{
//将编辑区的内容写入文件;
QString str = ui->textEdit->toPlainText();
QByteArray arr;
arr.append(str);
file.write(arr);
file.close();
}
}
}
//另存为
void MainWindow::saveasFileSlot()
{
//弹出另存为对话框,
filePath = QFileDialog::getSaveFileName(this,"另存为","./","TXT(*.txt)");
if(false == filePath.isEmpty())
{
//打开文件
QFile file(filePath);
bool ok = file.open(QIODevice::WriteOnly);
if(true == ok)
{
//将编辑区的内容写入文件
QString str = ui->textEdit->toPlainText();
QByteArray arr;
arr.append(str);
file.write(arr);
//关闭文件
file.close();
QFileInfo info(filePath);
fileName = info.fileName();
//更新标题栏
this->setWindowTitle(fileName);
}
}
}
void MainWindow::changeFontSlot(QFont font)
{
ui->textEdit->setCurrentFont(font);
}
void MainWindow::changeSizeSlot(QString size)
{
ui->textEdit->setFontPointSize(size.toDouble());
}
//实现加粗的槽函数
void MainWindow::boldSlot(bool ok)
{
if(true == ok)
{
ui->textEdit->setFontWeight(QFont::Bold);
}else
{
ui->textEdit->setFontWeight(QFont::Normal);
}
}
//实现颜色菜单的槽函数
void MainWindow::colorSlot()
{
QColor clr =QColorDialog::getColor(Qt::red,this,"颜色");
if(clr.isValid())
{
ui->textEdit->setTextColor(clr);
}
}
//设置斜体字槽函数
void MainWindow::italicSlot(bool ok)
{
if(true == ok)
{
ui->textEdit->setFontItalic(QFont::StyleItalic);
}
else
{
ui->textEdit->setFontItalic(QFont::StyleNormal);
}
}
//设置下划线按钮槽函数
void MainWindow::underSlot(bool ok)
{
if(true == ok)
{
ui->textEdit->setFontUnderline(QFont::UnderlineResolved);
}
else
{
ui->textEdit->setFontUnderline(QFont::UnderlineResolved);
}
}