#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextEdit>
#include <QDebug>
#include <QFileDialog>
#include <QFile>
#include <QTextStream>
#include <QMessageBox>
#include <QSignalMapper>
#include <QLabel>
#include <QFont>
#include <QFontDialog>
#include <QColorDialog>
#include <QPlainTextEdit>
#include <QTextEdit>
#include <QDateTime>
#include <QLabel>
#include <QDesktopServices>
#include <QUrl>
#include <QPrintDialog>
#include <QPrinter>
#include <QPageSetupDialog>
#include "myabout.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle(tr("无标题 - 测试记事本[*]"));
connect(ui->action_New, SIGNAL(triggered()), this, SLOT(NewCreate()));//新建文件
connect(ui->action_Open, SIGNAL(triggered()), this, SLOT(OpenFile()));//打开文件
connect(ui->action_Save, SIGNAL(triggered()), this, SLOT(SaveFile()));//保存文件
connect(ui->action_SaveAs, SIGNAL(triggered()), this, SLOT(SaveAsFile()));//另存文件
connect(ui->action_Close, SIGNAL(triggered()), this, SLOT(close()));//关闭
connect(ui->action_Font,SIGNAL(triggered(bool)),this,SLOT(SetFont()));//设置字体
connect(ui->action_Color, SIGNAL(triggered(bool)),this, SLOT(SetClolor()));//设置颜色
connect(ui->action_Time, SIGNAL(triggered(bool)), this, SLOT(GetCurrentTime()));//获取当前时间日期
connect(ui->action_Print,SIGNAL(triggered(bool)), this, SLOT(Printer()));//打印机
connect(ui->action_PageSet, SIGNAL(triggered(bool)), this, SLOT(PageSet()));//页面设置
connect(ui->textEdit->document(), &QTextDocument::contentsChanged,this, &MainWindow::documentWasModified);
//Edit Option
connect(ui->action_Uodo, SIGNAL(triggered(bool)), ui->textEdit->document(), SLOT(undo()));//撤销
connect(ui->action_Cut, SIGNAL(triggered(bool)), ui->textEdit, SLOT(cut()));//剪贴
connect(ui->action_Copy, SIGNAL(triggered(bool)), ui->textEdit, SLOT(copy()));//复制
connect(ui->action_Paste, SIGNAL(triggered(bool)), ui->textEdit, SLOT(paste()));//粘贴
connect(ui->action_SelectAll, SIGNAL(triggered(bool)), ui->textEdit, SLOT(selectAll()));//全选
connect(ui->action_About, SIGNAL(triggered(bool)), this, SLOT(showAbout()));//“关于记事本”子对话框
connect(ui->action_VisitWeb,SIGNAL(triggered(bool)), this, SLOT(VisitMyWeb()));//访问我的主页
//查看Option
connect(ui->action_Enlarge, SIGNAL(triggered(bool)), this, SLOT(FontSizeEnlarge()));//放大字体
connect(ui->action_Reduce, SIGNAL(triggered(bool)), this, SLOT(FontSizeReduce()));//缩小字体
connect(ui->action_Default, SIGNAL(triggered(bool)), this, SLOT(FontRestoreDefault()));//恢复默认
connect(ui->action_State, SIGNAL(triggered(bool)), this, SLOT(statusBar_Slot()));//状态栏
//一开始为选中文字时,标签不可用,只有当选中文字的时候才可用
ui->action_Cut->setEnabled(false);
ui->action_Copy->setEnabled(false);
ui->action_delete->setEnabled(false);
//当text被选中时,发出copyAvailable信号
connect(ui->textEdit, SIGNAL(copyAvailable(bool)), ui->action_Cut, SLOT(setEnabled(bool)));
connect(ui->textEdit, SIGNAL(copyAvailable(bool)), ui->action_Copy, SLOT(setEnabled(bool)));
connect(ui->textEdit, SIGNAL(copyAvailable(bool)), ui->action_delete, SLOT(setEnabled(bool)));
//添加状态栏,临时消息显示2秒
//ui->statusBar->showMessage(tr("欢迎使用康晓勇的记事本@@"),2);
statusLabel = new QLabel;
statusLabel->setText(tr("欢迎使用康晓勇的记事本@@"));
//statusLabel->setMinimumSize(150, 20); // 设置标签最小大小
//statusLabel->setFrameShape(QFrame::WinPanel); // 设置标签形状
//statusLabel->setFrameShadow(QFrame::Sunken); // 设置标签阴影
//ui->statusBar->addWidget(statusLabel);//显示左边
ui->statusBar->addPermanentWidget(statusLabel);//显示右边
//修改程序左上角图标
this->setWindowIcon(QIcon(":/images/images/notepad.png"));
//打印机对象
printer = new QPrinter;
//字体对象
font = new QFont;
fontSize = 12;//字体大小
//一开始"查看"菜单中的”状态栏“处于选中状态
ui->action_State->setCheckable(true);
ui->action_State->setChecked(true);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::documentWasModified()
{
setWindowModified(ui->textEdit->document()->isModified());
}
void MainWindow::VisitMyWeb()
{
QUrl url("https://blog.csdn.net/kxykkk");
QDesktopServices::openUrl(url);
}
//关于记事本
void MainWindow::About()
{
QString str = tr("这是一个记事本测试程序\n所有权:康晓勇\n时间:2018.12\n代码路径:https://me.csdn.net/download/kxykkk");
QMessageBox::about(this,tr("关于\"记事本\""),str);
}
//获取系统时间
void MainWindow::GetCurrentTime()
{
QDateTime currentData = QDateTime::currentDateTime();
ui->textEdit->insertPlainText(currentData.toString("yyyy-MM-dd hh:mm"));
}
//新建文档
void MainWindow::NewCreate()
{
bool isModified = ui->textEdit->document()->isModified();//当前文档已经改变
if(isModified)
{
if(fileName.isEmpty())
{
switch (MyMessageBox(tr("是否将更改保存到 无标题?"),tr("记事本")))
{
case QMessageBox::Save:
SaveAsFile();
break;
case QMessageBox::Discard:
break;
case QMessageBox::Cancel:
return;
default:
break;
}
}
else
{
SaveFile();
}
}
ui->textEdit->clear();
fileName.clear();
this->setWindowTitle(tr("无标题 - 测试记事本[*]"));
setWindowModified(false);//窗口不显示被更改标志
}
//打开文档
void MainWindow::OpenFile()
{
if(ui->textEdit->document()->isModified())//如果已经被修改过了,应该先保存再打开
{
QString text(tr("是否将更改保存到 "));
text += fileName.isEmpty()?(tr("无标题?")):fileName;
switch (MyMessageBox(text,tr(("记事本"))))
{
case QMessageBox::Save:
SaveFile();
break;
case QMessageBox::Discard:
break;
case QMessageBox::Cancel:
return;
default:
break;
}
}
QString openfileName = QFileDialog::getOpenFileName(this, tr("Open File"),
QDir::currentPath(),
tr("Images (*.png *.xpm *.jpg *.*)"));
if(openfileName.isEmpty())
return;
QFile file;
file.setFileName(openfileName);//设置文件名称
bool ok = file.open(QIODevice::ReadOnly);
if(ok)
{
QTextStream in(&file);
ui->textEdit->setText(in.readAll());
file.close();
fileName = openfileName;
ui->textEdit->document()->setModified(false);//文档没有别修改过
setWindowModified(false);//窗口不显示被更改标志
QFileInfo fi = QFileInfo(fileName);
this->setWindowTitle(fi.fileName()+"[*]");
}
else
{
QMessageBox::information(this, tr("错误提示"), tr("打开文件错误")+file.errorString(),
QMessageBox::Abort);
return ;
}
}
void MainWindow::WriteFile(QString filepath)
{
if(ui->textEdit->document()->isModified())
{
QFile file;
file.setFileName(filepath);//设置文件名称
bool ok = file.open