鏈接: https://pan.baidu.com/s/1Mapp9ascmqNObcDUCVnPA 提取碼: hxmt
一、需求分析
基礎功能:
- 輸入文字並顯示
- 複製粘貼(一般系統都支持)
- 保存到本地(存檔功能, 下次還能打開)
- 可以打開外部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。
如果對您有幫助可以點贊、收藏、關注,將會是我最大的動力 ↩︎