链接地址:【QT】QT+VS2019极简的记事本(附项目资源)
目录
一、需求分析
基础功能:
- 输入文字并显示
- 复制粘贴(一般系统都支持)
- 保存到本地(存档功能, 下次还能打开)
- 可以打开外部txt文件
- 可调节字体大小&颜色
- 可打印当前本地时间
二、界面布局
此次记事本的界面设计并没有使用QT Designer,界面的设计布局完全由代码编写,想要简单了解纯代码设计界面的读者,或许可以给你一些启发
三、实现代码
代码注释的很详细,品尝起来很美味
Notepad.h
#pragma once
#include <QMainWindow>
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QPlainTextEdit>
#include <QClipboard>
#include <QFileDialog>
#include <QFile>
#include <QFontDialog>
#include <QKeySequence>
#include <QtWidgets>
#include <QtCore>
class Notepad : public QMainWindow
{
Q_OBJECT
public:
Notepad(QWidget *parent = Q_NULLPTR);
~Notepad();
private slots:
void OpenFile(); //打开文件
void SaveFile(); //保存文件
void SetFont(); //设置字体
void SetColor(); //设置颜色
void OpenTime(); //时间日期
private:
QTextCodec* codec; //处理中文
QMenuBar* mainMenu; //主菜单
QMenu* fileMenu; //文件菜单
QAction* openAction; //打开文件
QAction* saveAction; //保存文件
QMenu* editMenu; //编辑菜单
QAction* copyAciton; //复制
QAction* pasteAction; //粘贴
QMenu* formatMenu; //格式菜单
QAction* fontAciton; //字体
QAction* colorAction; //颜色
QMenu* helpMenu; //帮助菜单
QAction* timeAction; //日期和时间
QTextEdit* textEdit; //编辑窗口
QClipboard* clipboard; //剪贴板
};
Notepad.cpp
#include "Notepad.h"
Notepad::Notepad(QWidget *parent)
: QMainWindow(parent)
{
codec = QTextCodec::codecForName("gbk");
//设置窗口大小及起始位置
this->setGeometry(200, 200, 800, 500);
//设置窗口名称
this->setWindowTitle(codec->toUnicode("QT记事本"));
mainMenu = new QMenuBar();
//文件菜单
fileMenu = new QMenu(codec->toUnicode("文件"));
mainMenu->addMenu(fileMenu);
//打开动作
openAction = new QAction(codec->toUnicode("打开"));
openAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O));
fileMenu->addAction(openAction);
//保存动作
saveAction = new QAction(codec->toUnicode("保存"));
saveAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S));
fileMenu->addAction(saveAction);
//编辑菜单
editMenu = new QMenu(codec->toUnicode("编辑"));
mainMenu->addMenu(editMenu);
//复制动作
copyAciton = new QAction(codec->toUnicode("复制"));
copyAciton->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_C));
editMenu->addAction(copyAciton);
//粘贴动作
pasteAction = new QAction(codec->toUnicode("粘贴"));
pasteAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_V));
editMenu->addAction(pasteAction);
//格式菜单
formatMenu = new QMenu(codec->toUnicode("格式"));
mainMenu->addMenu(formatMenu);
//字体动作
fontAciton = new QAction(codec->toUnicode("字体"));
formatMenu->addAction(fontAciton);
//颜色动作
colorAction = new QAction(codec->toUnicode("颜色"));
formatMenu->addAction(colorAction);
//帮助菜单
helpMenu = new QMenu(codec->toUnicode("帮助"));
mainMenu->addMenu(helpMenu);
//时间日期动作
timeAction = new QAction(codec->toUnicode("时间日期"));
helpMenu->addAction(timeAction);
//主菜单栏添加至窗口
this->setMenuBar(mainMenu);
//文本编辑
textEdit = new QTextEdit();
//文本编辑器添加至窗口
this->setCentralWidget(textEdit);
//链接信号和槽
connect(openAction, SIGNAL(triggered()), this, SLOT(OpenFile()));
connect(saveAction, SIGNAL(triggered()), this, SLOT(SaveFile()));
connect(copyAciton, SIGNAL(triggered()), this, SLOT(copy()));
connect(pasteAction, SIGNAL(triggered()), this, SLOT(paste()));
connect(fontAciton, SIGNAL(triggered()), this, SLOT(SetFont()));
connect(colorAction, SIGNAL(triggered()), this, SLOT(SetColor()));
connect(timeAction, SIGNAL(triggered()), this, SLOT(OpenTime()));
}
Notepad::~Notepad()
{
//清除缓存
mainMenu->deleteLater();
fileMenu->deleteLater();
openAction->deleteLater();
saveAction->deleteLater();
editMenu->deleteLater();
copyAciton->deleteLater();
pasteAction->deleteLater();
formatMenu->deleteLater();
fontAciton->deleteLater();
colorAction->deleteLater();
helpMenu->deleteLater();
timeAction->deleteLater();
textEdit->deleteLater();
}
//打开文件
void Notepad::OpenFile()
{
//显示文件打开对话框,并将选择的文件的路径存储在filePath
QString filePath;
filePath = QFileDialog::getOpenFileName
( this,
codec->toUnicode("打开文件"),
"",
tr("All Files (*.txt)")
);
qDebug() << "OpenFile(): "<<filePath;
if (filePath != "")
{
QFile file;
file.setFileName(filePath);
if (file.open(QFile::ReadOnly))
{
//如果文件被打开,将其内容显示在编辑窗口
textEdit->setPlainText(file.readAll());
file.close();
}
}
}
//保存文件
void Notepad::SaveFile()
{
//显示文件保存对话框,并将选择的文件的路径存储在filePath
QString filePath;
filePath = QFileDialog::getSaveFileName
( this,
codec->toUnicode("保存文件"),
"",
tr("All Files (*.txt)")
);
qDebug() << "SaveFile(): " << filePath;
if (filePath != "")
{
QFile file;
file.setFileName(filePath);
if (file.open(QFile::WriteOnly | QFile::Truncate))
{
//如果文件被打开,编辑内容
file.write(textEdit->toPlainText().toUtf8());
file.close();
}
}
}
//设置字体
void Notepad::SetFont()
{
bool ok;
QFont font = QFontDialog::getFont(&ok, textEdit->font(), this,codec->toUnicode("选择字体"));
if (ok)
{
// 设置字体
textEdit->setFont(font);
}
}
//设置颜色
void Notepad::SetColor()
{
bool ok;
QColor color = QColorDialog::getColor(Qt::green, this, codec->toUnicode("选择颜色"));
if (ok)
{
// 设置颜色
textEdit->setTextColor(color);
}
}
//时间日期
void Notepad::OpenTime()
{
// 获得当前时间
QDateTime current = QDateTime::currentDateTime();
// 转换时间格式
QString time = current.toString("yyyy-MM-dd hh:mm:ss");
// 将时间追加到文本下一行
textEdit->append(time);
}
结尾
如有不足之处,还望指正 [1]。
-
如果对您有帮助可以点赞、收藏、关注,将会是我最大的动力 ↩︎