一、功能介绍
能实现新建,打开,保存文件
能修改显示区域文字的颜色
能修改显示区域的背景颜色
二、代码
mainwindows.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMenu>
#include<QTextEdit>
#include<QMenuBar>
#include<QAction>
#include <QFile>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
/* 属性 */
private:
QString fileNameString; // 文件名
bool isChanged; // 文件是否改变
QTextEdit *textArea; // 文本编辑区域
QFile file; /* QFile类型对象 */
QColor textColor; // 文本的颜色
QColor bgColor; // 背景的颜色
QMenu *fileMenu;//文件下拉菜单
QAction *newFile;//新建文件。
QAction *openFile;//打开文件。
QAction *saveFile;//保存文件。
QAction *quitFile;//退出。
QMenu *editMenu;//编辑下拉菜单
QAction *copyEdit; // 复制
QAction *pasteEdit; // 粘贴
QAction *cutEdit; // 剪切
QAction *allseleteEdit; // 全选
QMenu *helpMenu;//帮助下拉菜单
QAction *aboutSoftware; // 关于软件
QAction *howToUse; // 怎么去使用
QMenu *colorMenu;//颜色下拉菜单
QAction *colorDialog; // 文字颜色对话框
QAction *bgcolorDialog; // 背景颜色对话框
/* 函数 */
private:
void InitWidget(); // 初始化窗口
void OpenFile(); // 打开文件
protected:
void paintEvent(QPaintEvent *);
/* 槽函数 */
private slots:
void on_new();//新建
void on_open();//打开
void on_save();//保存
void on_quit();//退出
void on_copy();//复制
void on_paste();//粘贴
void on_cut();//剪切
void on_allSelect();//全选
void on_howtoUse();//如何使用
void on_aboutSoftware();//关于软件
void on_changed();//改变
void on_colorDialog();//文字颜色对话框
void on_bgcolorDialog();//背景颜色对话框
};
#endif // MAINWINDOW_H
mainwindow.cpp
/**
* @projectName notepad
* @brief 记事本
* @author luatao
* @date 2021-09-15 09:23
*/
#include "mainwindow.h"
#include<QMessageBox>
#include<QDebug>
#include<QFileDialog>
#include <QColorDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
isChanged = false; // 判断文件是否改变 初始没有改变
textColor = Qt::green; // 默认字体颜色绿色
bgColor = Qt::black; // 默认背景颜色黑色
InitWidget(); // 初始化窗口
}
MainWindow::~MainWindow()
{
}
void MainWindow::InitWidget()
{
textArea=new QTextEdit; // 添加一个文本编辑区域
this->setCentralWidget(textArea);
connect(textArea,&QTextEdit::textChanged,this,&MainWindow::on_changed); // 文本改变
/*-------------文件下拉项------------------*/
fileMenu=this->menuBar()->addMenu(u8"文件");
newFile=new QAction(u8"新建",this);
newFile->setShortcut(tr("CTRL+N")); // 添加快捷键
fileMenu->addAction(newFile);//添加到菜单
// connect(newFile,&QAction::triggered,this,&MainWindow::on_new);
connect(newFile,SIGNAL(triggered()),this,SLOT(on_new()));
openFile=new QAction(u8"打开",this);
openFile->setShortcut(tr("CTRL+O"));
fileMenu->addAction(openFile);//添加到菜单
// connect(openFile,&QAction::triggered,this,&MainWindow::on_open);
connect(openFile,SIGNAL(triggered()),this,SLOT(on_open()));
saveFile=new QAction(u8"保存",this);
saveFile->setShortcut(tr("CTRL+S"));
fileMenu->addAction(saveFile);//添加到菜单
// connect(saveFile,&QAction::triggered,this,&MainWindow::on_save);
connect(saveFile,SIGNAL(triggered()),this,SLOT(on_save()));
quitFile=new QAction(u8"退出",this);
quitFile->setShortcut(tr("CTRL+Q"));
fileMenu->addAction(quitFile);//添加到菜单
// connect(quitFile,&QAction::triggered,this,&MainWindow::on_quit);
connect(quitFile,SIGNAL(triggered()),this,SLOT(on_quit()));
/*-------------文件下拉项完成------------------*/
/*-------------编辑下拉项---------------------*/
editMenu=this->menuBar()->addMenu(u8"编辑");
copyEdit=new QAction(u8"复制",this);
copyEdit->setShortcut(tr("CTRL+C"));
editMenu->addAction(copyEdit);//添加到菜单
// connect(copyEdit,&QAction::triggered,this,&MainWindow::on_copy);
connect(copyEdit,SIGNAL(triggered()),this,SLOT(on_copy()));
pasteEdit=new QAction(u8"粘贴",this);
pasteEdit->setShortcut(tr("CTRL+V"));
editMenu->addAction(pasteEdit);//添加到菜单
//connect(pasteEdit,&QAction::triggered,this,&MainWindow::on_paste);
connect(pasteEdit,SIGNAL(triggered()),this,SLOT(on_paste()));
cutEdit=new QAction(u8"剪切",this);
cutEdit->setShortcut(tr("CTRL+X"));
editMenu->addAction(cutEdit);//添加到菜单
// connect(cutEdit,&QAction::triggered,this,&MainWindow::on_cut);
connect(cutEdit,SIGNAL(triggered()),this,SLOT(on_cut()));
allseleteEdit=new QAction(u8"全选",this);
allseleteEdit->setShortcut(tr("CTRL+A"));
editMenu->addAction(allseleteEdit);//添加到菜单
// connect(allseleteEdit,&QAction::triggered,this,&MainWindow::on_allSelect);
connect(allseleteEdit,SIGNAL(triggered()),this,SLOT(on_allSelect()));
/*-------------编辑下拉项完成---------------------*/
/*------------颜色对话框--------------------------*/
colorMenu=this->menuBar()->addMenu(u8"颜色");
colorDialog=new QAction(u8"文字颜色",this);
colorMenu->addAction(colorDialog);
connect(colorDialog,&QAction::triggered,this,&MainWindow::on_colorDialog);
bgcolorDialog=new QAction(u8"背景颜色",this);
colorMenu->addAction(bgcolorDialog);
connect(bgcolorDialog,&QAction::triggered,this,&MainWindow::on_bgcolorDialog);
/*--------------颜色对话框完成----------------------*/
/*-------------帮助下拉项---------------------*/
helpMenu=this->menuBar()->addMenu(u8"帮助");
aboutSoftware=new QAction(u8"关于软件",this);
helpMenu->addAction(aboutSoftware);
connect(aboutSoftware,&QAction::triggered,this,&MainWindow::on_aboutSoftware);
howToUse=new QAction(u8"如何使用",this);
helpMenu->addAction(howToUse);
connect(howToUse,&QAction::triggered,this,&MainWindow::on_howtoUse);
/*-------------帮助下拉项完成---------------------*/
}
/**
* @brief OpenFile
* 打开文件
*/
void MainWindow::OpenFile()
{
fileNameString = QFileDialog::getOpenFileName(this,"打开");//当前窗体,打开文件的对话框的标题是:“打开”
if(fileNameString==NULL){ // 打开的文件路径为空
return ;
}
file.setFileName(fileNameString); // 指向文件
/* 判断文件是否存在 */
if(!file.exists())
return ;
/* 以只写方式打开文件 */
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
return ;
QTextStream stream(&file); // 使用文本流读取文件
textArea->setPlainText(stream.readAll()); // 读取全部文件到文本区域
file.close(); // 关闭文件
}
/**
* @brief MainWindow::on_new
* 新建文件
*/
void MainWindow::on_new()
{
if(isChanged) // 文本区域改变
{
//QMessageBox::information(this,"提示","文件尚未保存");
QMessageBox::StandardButton btn;
btn = QMessageBox::question(this,"提示","文件尚未保存,确定要新建吗?",QMessageBox::Yes|QMessageBox::No);
if(btn == QMessageBox::Yes){
textArea->setText(""); // 文本区域清空
}else{
}
}
else
{
textArea->setText(""); // 文本区域清空
}
}
/**
* @brief MainWindow::on_open
* 打开文件
*/
void MainWindow::on_open()
{
if(isChanged)
{
// QMessageBox::information(this,"提示","文件尚未保存");
QMessageBox::StandardButton btn;
btn = QMessageBox::question(this,"提示","文件尚未保存,确定要打开吗?",QMessageBox::Yes|QMessageBox::No);
if(btn == QMessageBox::Yes){
OpenFile(); // 打开文件
}else{
}
}
else
{
OpenFile(); // 打开文件
}
}
/**
* @brief MainWindow::on_save
* 保存文件
*/
void MainWindow::on_save()
{
fileNameString = QFileDialog::getSaveFileName(this,"保存");
if(fileNameString==NULL)
return ;
file.setFileName(fileNameString); // 指向文件
/* 以只写方式打开文件 */
if(!file.open(QIODevice::WriteOnly))
return ;
QTextStream stream(&file); // 使用文本流写入文件
stream.setCodec("UTF-8"); // 指定编码
stream << textArea->toPlainText(); // 写入到文件
file.close();
isChanged = false; // 文本没有改变
}
/**
* @brief MainWindow::on_quit
* 退出
*/
void MainWindow::on_quit()
{
if(isChanged){
// QMessageBox::information(this,"提示","文件尚未保存,点击右上角×,取消保存");
QMessageBox::StandardButton btn;
btn = QMessageBox::question(this,"提示","文件尚未保存,确定要打开吗?",QMessageBox::Yes|QMessageBox::No);
if(btn == QMessageBox::Yes){
this->close(); // 关闭当前窗口
}else{
}
}
else {
this->close(); // 关闭当前窗口
}
}
/**
* @brief MainWindow::on_copy
* 复制
*/
void MainWindow::on_copy()
{
textArea->copy();
}
/**
* @brief MainWindow::on_paste
* 粘贴
*/
void MainWindow::on_paste()
{
textArea->paste();
}
/**
* @brief MainWindow::on_cut
* 剪切
*/
void MainWindow::on_cut()
{
textArea->cut();
}
/**
* @brief MainWindow::on_allSelect
* 全选
*/
void MainWindow::on_allSelect()
{
textArea->selectAll();
}
/**
* @brief MainWindow::on_howtoUse
* 使用帮助
*/
void MainWindow::on_howtoUse()
{
QMessageBox::information(this,"如何使用","暂时不写");
}
/**
* @brief MainWindow::on_aboutSoftware
* 关于软件
*/
void MainWindow::on_aboutSoftware()
{
QMessageBox::information(this,"关于软件","作者:冷月枫 2021-09-14 11:56:53");
}
/**
* @brief MainWindow::on_colorDialog
* 文字颜色对话框
*/
void MainWindow::on_colorDialog()
{
/* 初始颜色 红色 父窗口 对话框标题
* color:QColor(ARGB 1, 1, 0, 0) 透明度 RGB值
*/
textColor = QColorDialog::getColor(Qt::red,this,tr("文字颜色对话框!"));
// qDebug()<<"textColor: "<<textColor;
}
/**
* @brief on_bgcolorDialog
* 背景颜色对话框
*/
void MainWindow::on_bgcolorDialog()
{
bgColor = QColorDialog::getColor(Qt::red,this,tr("背景颜色对话框!"));
}
/**
* @brief MainWindow::on_changed
* 文本改变
*/
void MainWindow::on_changed()
{
// qDebug() << "text changed" << endl;
isChanged=true;
}
void MainWindow::paintEvent(QPaintEvent *)
{
qDebug() << "paintEvent" << endl;
/* 背景颜色 */
//textArea->setba(bgColor);
// 设置QTextEdit背景和字体颜色
/* QPalette: 调色板 */
QPalette pl = textArea->palette(); // 获取textEdit的调色板
pl.setColor(QPalette::Base, bgColor); // 设置背景色为黑色
pl.setColor(QPalette::Text, textColor); // 设置文本颜色为绿色
textArea->setPalette(pl); // 设置回调色板
/* 文字颜色 */
// textArea->setTextColor(textColor); // 设置颜色
// QString str = textArea->toPlainText(); // 获取文本区域的文字
// textArea->setText(str); // 设置之前的文字
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
//qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
QApplication a(argc, argv);
MainWindow w;
w.resize(800,480);
w.show();
return a.exec();
}
三、运行