【QT】QT+VS2019極簡的記事本(附項目資源)

鏈接: https://pan.baidu.com/s/1Mapp9ascmqNObcDUCVnPA 提取碼: hxmt

一、需求分析

基礎功能:

  1. 輸入文字並顯示
  2. 複製粘貼(一般系統都支持)
  3. 保存到本地(存檔功能, 下次還能打開)
  4. 可以打開外部txt文件
  5. 可調節字體大小&顏色
  6. 可打印當前本地時間

二、界面佈局

此次記事本的界面設計並沒有使用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


  1. 如果對您有幫助可以點贊、收藏、關注,將會是我最大的動力 ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章