#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QT>
#include<QTimer>
#include<QDateTime>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle("记事本");
isChange = 0;//当文件被修改才会为1
newfile = 1;//当是保存已有的文件时才会为0
val = 0;
//匿名对象
this->setWindowIcon(QIcon("://pic/notepad.png"));
//状态栏时间
timelabel = new QLabel; // 创建QLabel控件
ui->statusBar->addWidget(timelabel); //在状态栏添加此控件
QTimer *timer = new QTimer(this);
timer->start(1000); //每隔1000ms发送timeout的信号
connect(timer, SIGNAL(timeout()),this,SLOT(time_update()));
//状态栏鼠标 QMainWindow开启鼠标需要分两步
//1.先把QMainWindow的CentrolWidget移动监视开启
//2.再开启QMainWindow的鼠标
ui->centralWidget->setMouseTracking(true);
this->setMouseTracking(true);
lable = new QLabel;
lable->resize(100, 30);
ui->statusBar->addPermanentWidget(lable);
}
MainWindow::~MainWindow()
{
delete ui;
}
//打开文件
void MainWindow::on_action_open_triggered()
{
newfile = 0;
//打开文件对话框,选择文件
fileName = QFileDialog::getOpenFileName(this,\
tr("打开"), ".", tr("Text (*.c *.cpp *.txt *.png *.jpg *.bmp)"));//'.'为当前目录
//显示到状态栏
ui->statusBar->showMessage("will open"+fileName,3000);
if(fileName.isEmpty())
{
ui->statusBar->showMessage("选择文件失败");
return;
}
//打开文件
QFile file(fileName);
bool ret = file.open(QIODevice::ReadOnly);
if(!ret)
{
ui->statusBar->showMessage("打开文件失败");//statusBar状态栏 showMessage显示临时信息
return;
}
//读取文件内容
QByteArray buf = file.readAll();
//把字节流(QByteArray)转换为相应编码的QString(utf-8)
//代表读出的 字节流 是utf-8编码,那么fromUtf8接口会按照Utf8编码转换为utf-8
QString str = QString::fromUtf8(buf);
//代表读出的字节流是gbk编码,那么fromLocal8Bit接口会按照gbk编码转换为utf-8
//QString str = QString::fromLocal8Bit(buf);
ui->textEdit->setText(QString(str));//QString()可以自动将QByteArray的类型转换为string类型
}
//另存为
void MainWindow::on_action_save_at_triggered()
{
//打开 保存类型 的对话框
QString fileName = QFileDialog::getSaveFileName(this,\
tr("另存为"), "d:", tr("Text (*.c *.cpp *.txt *.png *.jpg *.bmp)"));
//判断保存位置
if(fileName.isEmpty())
{
ui->statusBar->showMessage("选择文件位置失败");
}
//打开文件并保存
QFile file(fileName);
bool ret = file.open(QIODevice::ReadWrite | QIODevice::Truncate);//读写和清空
if(!ret){
ui->statusBar->showMessage("文件位置不合法");
return;
}
//写
QString text = ui->textEdit->toPlainText();
QByteArray arr = text.toUtf8();//将QByteArray按照utf-8编码转换为QString
//QByteArray buf = text.toLocal8Bit();////将QByteArray按照本地编码转换为QString
file.write(arr);//写入
ui->statusBar->showMessage("保存成功",2000);
}
//退出记事本
void MainWindow::on_action_quit_triggered()
{
if(isChange == 0)
this->close();
else
{
int ret = QMessageBox::question(NULL,"注意","文件还未保存,是否要保存");
if(ret == QMessageBox::Yes) //如果选择 保存
{
if(newfile==1)//如果是新建的文件
{
on_action_save_at_triggered();//另存为
}
else
{
quick_save(fileName);//直接保存
}
}
else //不保存直接退出
this->close();
}
}
//保存
void MainWindow::on_action_save_triggered()
{
if(newfile==0)
{
quick_save(fileName);//直接用打开文件的文件名来保存
}
else
{
on_action_save_at_triggered();//转到另存为
}
}
//用来直接保存的函数
void MainWindow::quick_save(const QString &sfileName)
{
QFile sFile(sfileName);
if(!sFile.open(QIODevice::ReadWrite | QIODevice::Truncate))
return;
QString text = ui->textEdit->toPlainText();
QByteArray arr = text.toUtf8();//将QByteArray按照utf-8编码转换为QString
//QByteArray buf = text.toLocal8Bit();////将QByteArray按照本地编码转换为QString
sFile.write(arr);//写入
ui->statusBar->showMessage("保存成功",2000);
}
//新建
void MainWindow::on_action_new_triggered()
{
if(isChange == 1)
{
int ret = QMessageBox::question(NULL,"注意","文件未被保存,需要保存吗");
if(ret ==QMessageBox::Yes)
{
on_action_save_at_triggered();
}
}
else
{
ui->textEdit->clear();
isChange = 1;
newfile = 1;
}
}
//创建新窗体
void MainWindow::on_action_window_triggered()
{
MainWindow * windows = new MainWindow;
windows->show();
}
//工具:日期时间
void MainWindow::on_action_data_triggered()
{
QFont font("Microsoft SimHei",10,10);//黑体
QDateTime time = QDateTime::currentDateTime();//获取当前时间
QString tim = time.toString("yyyy-MM-dd hh:mm:ss dddd");//格式
ui->textEdit->setFont(font); //字体
ui->textEdit->setText(tim); //时间内容
}
//ctrl与鼠标滚轮 放大缩小
void MainWindow::wheelEvent(QWheelEvent *event)
{
if(QApplication::keyboardModifiers() == Qt::ControlModifier)//ctrl
{
if(event->delta() > 0)
{
font.setPixelSize(++val);
ui->textEdit->setFont(font);
}
else
{
font.setPixelSize(--val);
ui->textEdit->setFont(font);
}
}
}
//工具:搜索
void MainWindow::on_action_find_triggered()
{
find_word = new QDialog(this);//实例化对话框
find_word->setWindowTitle(tr("查找"));//该对话框标题
findLineEdit = new QLineEdit(find_word);//该文本框建立于对话框中
QPushButton *btn = new QPushButton(tr("查找下一个"),find_word);
//垂直布局 对话框和按钮
QVBoxLayout * layout = new QVBoxLayout(find_word);
layout->addWidget(findLineEdit);
layout->addWidget(btn);
QObject::connect(btn,SIGNAL(clicked()),this, SLOT(find_showSlot()));
find_word->show();
}
void MainWindow::find_showSlot()
{
qDebug() <<"开始搜索 ";
QString part = findLineEdit->text();
bool ret = ui->textEdit->find(part,QTextDocument::FindWholeWords|QTextDocument::FindWholeWords);//QTextDocument:结构化副文本框容器
if(!ret) //FindBackWard向后搜索,FindWholeWords包含查找,若不指定该参数,默认的是向前查找、不区分大小写、整个单词查找而不是包含单词
{
QMessageBox::warning(this,tr("查找结果"),tr("未找到%1").arg(part));
}
}
//工具:复制
void MainWindow::on_action_copy_triggered()
{
ui->textEdit->copy();
}
//工具 剪贴
void MainWindow::on_action_cut_triggered()
{
ui->textEdit->cut();
}
//工具 粘贴
void MainWindow::on_action_paste_triggered()
{
ui->textEdit->paste();
}
//图片
void MainWindow::on_action_image_triggered()
{
//打开文件对话框,选择文件
fileName = QFileDialog::getOpenFileName(this,\
tr("打开"), "/", tr("Text (*.jpg .*png)"));//'.'为当前目录
//显示到状态栏
ui->statusBar->showMessage("will open"+fileName,3000);
if(fileName.isEmpty())
{