QT--记事本

11 篇文章 1 订阅

一、功能介绍

能实现新建,打开,保存文件
能修改显示区域文字的颜色
能修改显示区域的背景颜色

二、代码

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();
}

三、运行

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
运用Qt开发工具来实现一个记事本,用户图形界面操作,通过Qt提供的图形库来设计记事本的管理、应用基本窗口,主要实现打开、新建、保存、另存为、查找、居中、字体、颜色等功能设计,同时在软件内部实现对于这些功能的支持和实现。还有对用户剪切、复制、粘贴、等功能的支持 核心代码讲解 1、打开文件功能 void MainWindow::on_action_2_triggered() { QString filename = QFileDialog::getOpenFileName(this); loadFile(filename); } 打开文件on_action_2_triggered()通过转到槽实现首先定义一个Qstring类型的filename让它获取你文件名,其次寻找它的本地连接。 3、保存文件功能 void MainWindow::on_action_3_triggered() { if(isSaved){ saveFile(curFile); } else{ do_file_SaveAS(); } } 保存文件功能on_action_3_triggered()通过转到槽实现,先判断bool型的isSaved是否是正确的,如果错则保存当前文件,否则执行另存为。 5、关闭功能 void MainWindow::on_action_5_triggered() { if(close){ QMessageBox::information(this,"提示","文件尚未保存,关闭"); }else{ ui->textEdit->close(); } } 关闭功能on_action_5_triggered()先对文本进行判断是否是关闭的,如果是错弹出对话框提示消息文件尚未保存,关闭,否则对文档进行关闭 11、查找功能 //查找 void MainWindow::close_findhangshu() { ui->gridLayoutWidget->close(); } close_findhangshu()对查找对话框进行关闭函数。 void MainWindow::on_action_11_triggered() { QDialog *closefind=new QDialog(this); QDialog *findDlg=new QDialog(this); find_textLineEdit=new QLineEdit(findDlg); QPushButton *find_Bth=new QPushButton(tr("查找下一个"),findDlg); QPushButton *close_find=new QPushButton(tr("关闭"),closefind); ui->gridLayout->addWidget(find_textLineEdit); ui->gridLayout->addWidget(find_Bth); ui->gridLayout->addWidget(close_find); connect(find_Bth,SIGNAL(clicked()),this,SLOT(show_findText())); connect(close_find,SIGNAL(clicked()),this,SLOT(close_findhangshu())); } 查找功能on_action_11_triggered()函数通过转到槽实现下面部分:先定义两个QDialog类型 指针变量*closefind和*findDlg,对它们进行新创建空间, find_textLineEdit=new QLineEdit(findDlg);新建一个空间对QlineEdit它进行传参,将findDlg传入目的是查找在文档中对应的文字,QPushButton *find_Bth=new QPushButton(tr("查找下一个"),findDlg);QPushButton *close_find=new QPushButton(tr("关闭"),closefind);这两个代码作用相同定义两个Qpubutton当点击查找功能弹出对话框时在对话框中实现查找下一个和关闭connect(find_Bth,SIGNAL(clicked()),this,SLOT(show_findText()));connect(close_find,SIGNAL(clicked()),this,SLOT(close_findhangshu()));点击查找下一个按钮时对它进行连接,执行show_findText()函数中的查找操作,如果点击关闭执行上述所说的close_findhangshu()关闭对话框操作 void MainWindow:: show_findText() { QString findText=find_textLineEdit->text(); if(!ui->textEdit->find(findText,QTextDocument::FindBackward)) { QMessageBox::warning(this,tr("查找"),tr("找不到 %1").arg(findText)); } } show_findText()此函数先定义QString类型 findText值,对文本进行扫描,如果文本不能找到找到则提示找不到。 本人也只是一个学生,记得点赞哦!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值