模拟记事本

1. 模拟记事本

设计一个记事本

(1)更改字体颜色

(2)更改字体大小

(3)新建记事本

(4)查找记事本中的数据

(5)设置消息提示

(6)设置粘贴、复制、剪切、撤销等

......................

my_notepad

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDebug>
#include <QAction>
#include <QPushButton>
#include <QMenu>
#include <QToolBar>
#include <QFontDialog>
#include <QFont>
#include <QColorDialog>
#include <QColor>
#include <QPlainTextEdit>
#include <QDockWidget>
#include <QFileDialog>
#include <QInputDialog>
#include <QMessageBox>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public slots:

    //执行新建操作
    void create_text();
    //执行另存为操作
    void rece_lingcunwei();
    //执行打开操作
    void dakai();
    //执行查找操作
    void my_search();
    //执行剪切操作
    void jianqie();
    //复制操作
    void fuzhi();
    //粘贴操作
    void zhantie();
    //撤销操作
    void chexiao();

    //执行加粗
    void jia_cu();
    //执行字体变大
    void zitiBig();
    //执行字体变小
    void zitiSmall();
    //执行字体颜色改变
    void zitiColor();


private:
    Ui::MainWindow *ui;

    //菜单栏
    //新建动作
    QAction* action_create = new QAction();
    //打开动作
    QAction* action_dakai = new QAction();
    //另存为动作
    QAction* action_lingcunwei = new QAction();
    //查找动作
    QAction* action_search = new QAction();

    //剪切操作
    QAction* action_jianqie = new QAction();
    //复制操作
    QAction* action_copy = new QAction();
    //粘贴操作
    QAction* action_zhantie = new QAction();
    //撤销操作
    QAction* action_chexiao = new QAction();


    //实例化工具栏
    QToolBar* toolBar = new QToolBar;
    //加粗动作
    QAction* jiacu = new QAction();
    //字体变大动作
    QAction* ziti_big = new QAction();
    //字体变大动作
    QAction* ziti_small = new QAction();
    //改变字体颜色
    QAction* ziti_color = new QAction();



    //状态栏
    QPushButton* btn4 = new QPushButton("100%");
    QPushButton* btn5 = new QPushButton("UTF-8");
    QPushButton* btn6 = new QPushButton("第1行 第5列");

    //工作区
    //实例化纯文本编辑框
    QPlainTextEdit* plainTextEdit = new QPlainTextEdit;


};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

/*
设计一个记事本
		(1)更改字体颜色
		(2)更改字体大小
		(3)新建记事本
		(4)查找记事本中的数据
		(5)设置消息提示
		(6)设置粘贴、复制、剪切、撤销等
		......................
*/

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QMenu* menu_dir = ui->menubar->addMenu("文件(F)");
    action_create = menu_dir->addAction("新建(N)");

    action_dakai = menu_dir->addAction("打开(O)");

    action_lingcunwei = menu_dir->addAction("另存为(A)");

    menu_dir->addMenu("退出(X)");

    QMenu* menu_edit = ui->menubar->addMenu("编辑(E)");
    action_chexiao = menu_edit->addAction("撤销");
    action_jianqie =  menu_edit->addAction("剪切");
    action_copy = menu_edit->addAction("复制");
    action_zhantie = menu_edit->addAction("粘贴");
    action_search = menu_edit->addAction("查找");


    QMenu* menu_geshi = ui->menubar->addMenu("格式(O)");
    menu_geshi->addMenu("字体");

    QMenu* menu_look = ui->menubar->addMenu("查看(V)");
    menu_look->addMenu("缩放");
    menu_look->addMenu("状态栏");

    QMenu* menu_help = ui->menubar->addMenu("帮助(H)");
    menu_help->addMenu("查看帮助");

    //绑定新建动作
    connect(this->action_create,SIGNAL(triggered()),this,SLOT(create_text()));
    //绑定用户点击  另存为...   执行一个动作,就会触发一个信号
    connect(this->action_lingcunwei,SIGNAL(triggered()),this,SLOT(rece_lingcunwei()));
    //绑定打开操作
    connect(this->action_dakai,SIGNAL(triggered()),this,SLOT(dakai()));
    //绑定查找操作
    connect(this->action_search,SIGNAL(triggered()),this,SLOT(my_search()));
    //绑定剪切操作
    connect(this->action_jianqie,SIGNAL(triggered()),this,SLOT(jianqie()));
    //绑定复制操作
    connect(this->action_copy,SIGNAL(triggered()),this,SLOT(fuzhi()));
    //绑定粘贴操作
    connect(this->action_zhantie,SIGNAL(triggered()),this,SLOT(zhantie()));
    //绑定撤销操作
    connect(this->action_chexiao,SIGNAL(triggered()),this,SLOT(chexiao()));


    //添加一个工具栏
    this->addToolBar(this->toolBar);
    //加粗
    this->jiacu = this->toolBar->addAction("B");
    //字体变大
    this->ziti_big = this->toolBar->addAction("A");
    //字体变小
    this->ziti_small = this->toolBar->addAction("a");
    //改变字体颜色
    this->ziti_color = this->toolBar->addAction("C");

    //绑定加粗动作
    connect(this->jiacu,SIGNAL(triggered()),this,SLOT(jia_cu()));
    //绑定字体变大动作
    connect(this->ziti_big,SIGNAL(triggered()),this,SLOT(zitiBig()));
    //绑定字体变小动作
    connect(this->ziti_small,SIGNAL(triggered()),this,SLOT(zitiSmall()));
    //绑定字体颜色动作
    connect(this->ziti_color,SIGNAL(triggered()),this,SLOT(zitiColor()));


    //添加状态栏
    ui->statusbar->setSizeGripEnabled(true);//右下角有三角网格
    this->btn4->setFlat(true);//隐藏按钮的边框
    ui->statusbar->addWidget(this->btn4);
    //设置位置
    this->btn5->setFlat(true);
    ui->statusbar->addPermanentWidget(this->btn5);//设置到右边
    this->btn6->setFlat(true);
    ui->statusbar->addPermanentWidget(this->btn6);//设置到右边

    //添加工作区
    //向中心工作区添加纯文本编辑框
    this->setCentralWidget(this->plainTextEdit);

}

MainWindow::~MainWindow()
{
    delete ui;
}

//执行新建操作
void MainWindow::create_text(){
    //再打开一个窗口
    MainWindow* w2 = new MainWindow;
    w2->show();
}

//执行另存为操作
void MainWindow::rece_lingcunwei(){
    qDebug()<<"执行另存为..."<<endl;

    QString title = "保存文件";
    QString dir = "E:/";
    //设置文件过滤类型
    QString filter = "文本文件(*.txt)";
    //这里的fileName保存的用户打开的路径
    QString fileName = QFileDialog::getSaveFileName(this,title,dir,filter);

    if(!fileName.isEmpty()){
        //直接操作文件
        QFile file(fileName);
        //打开文件
        if(file.open(QIODevice::ReadWrite|QIODevice::Text)){
            //取出用户输入
            QString data = plainTextEdit->toPlainText();
            //写入
            file.write(data.toUtf8());//toUtf8() 将QString转为QByteArray类型
        }
        file.close();//关闭
    }
    //另存为完成后,关闭记事本界面
    this->close();
}

//打开操作
void MainWindow::dakai(){
    //打开操作就相当于读取文件内容
    qDebug()<<"执行打开操作"<<endl;

    QString title = "打开文件";
    QString dir = "E:/";
    //设置文件过滤类型
    QString filter = "文本文件(*.txt)";
    //这里的fileName保存的用户打开的路径
    QString fileName = QFileDialog::getOpenFileName(this,title,dir,filter);
    if(!fileName.isEmpty()){
        //直接操作文件
        QFile file(fileName);
        //打开文件
        if(file.open(QIODevice::ReadOnly|QIODevice::Text)){
            //读取文件内容
            QByteArray data = file.readAll();

            //再打开一个窗口
            MainWindow* w3 = new MainWindow;
            w3->show();
            //写入记事本
            w3->plainTextEdit->appendPlainText(data);

        }
        file.close();//关闭
    }
}

//执行查找操作
void MainWindow::my_search(){
    //输入对话框
    // 获取查找文本
    QString searchText = QInputDialog::getText(this, "查找", "请输入要查找的文本:");

    if (searchText.isEmpty()) {
        // 用户取消了查找
        return;
    }

    // 在文本中查找
    //先获取光标位置
    QTextCursor cursor = plainTextEdit->textCursor();

    //将文本光标(QTextCursor)移动到文本的开头位置。
    cursor.movePosition(QTextCursor::Start);
    //设置光标的位置在开头
    plainTextEdit->setTextCursor(cursor);

    //plainTextEdit->find(searchText)查找内容,用于在文本编辑器中查找指定的文本,并返回一个布尔值
    while (plainTextEdit->find(searchText)) {
        // 选中将找到的文本
        plainTextEdit->setTextCursor(plainTextEdit->textCursor());

        // 询问用户是否继续查找
        QMessageBox::StandardButton reply = QMessageBox::question(this, "继续查找", "是否继续查找?",QMessageBox::Yes | QMessageBox::No);
        if (reply == QMessageBox::No) {
            break;
        }

        // 将光标移到下一个字符位置以便继续查找
        cursor.movePosition(QTextCursor::NextCharacter);
    }
}

//剪切操作
void MainWindow::jianqie(){
    plainTextEdit->cut();
}
//复制操作
void MainWindow::fuzhi(){
    plainTextEdit->copy();
}
//粘贴操作
void MainWindow::zhantie(){
    plainTextEdit->paste();
}
//撤销操作
void MainWindow::chexiao(){
    plainTextEdit->undo();
}


//执行加粗
void MainWindow::jia_cu(){
    qDebug()<<"字体加粗";
//    bool ok = false;
//    //选择字体格式
//    QFont font = QFontDialog::getFont(&ok,this);
//    if(ok){

//        //定位光标操作文本
//        QTextCursor cursor =  plainTextEdit->textCursor();
//        //通过 QTextCharFormat,你可以设置文本的字体、字号、颜色、背景颜色、粗体、斜体等属性。
//        QTextCharFormat format;
//        format.setFont(font);
//        //把格式设置给选中文本
//        cursor.mergeCharFormat(format);

//        qDebug()<<"字体设置成功"<<endl;
//    }


    //定位光标操作文本
    QTextCursor cursor =  plainTextEdit->textCursor();
    //获取当前文本格式
    QTextCharFormat format = cursor.charFormat();
    //获取当前字体
    QFont font = format.font();
    // 切换加粗状态
    font.setBold(!font.bold());

    // 将新的字体应用于格式
    format.setFont(font);

    // 将新的格式应用于选中的文本
    cursor.mergeCharFormat(format);

}

//执行字体变大
void MainWindow::zitiBig(){
    qDebug()<<"字体大小改变";

    //定位光标操作文本
    QTextCursor cursor =  plainTextEdit->textCursor();
    //获取当前文本格式
    QTextCharFormat format = cursor.charFormat();
    //获取当前字体
    QFont font = format.font();

    // 获取当前字体大小
    qreal currentSize = font.pointSizeF();

    //增加字体大小
    qreal newSize = currentSize + 2;

    //设置新的字体大小
    font.setPointSizeF(newSize);

    // 将新的字体应用于格式
    format.setFont(font);

    //把格式设置给选中文本
    cursor.mergeCharFormat(format);

    qDebug()<<"字体变大成功"<<endl;

}

//执行字体变小
void MainWindow::zitiSmall(){
    qDebug()<<"字体大小改变";

    //定位光标操作文本
    QTextCursor cursor =  plainTextEdit->textCursor();
    //获取当前文本格式
    QTextCharFormat format = cursor.charFormat();
    //获取当前字体
    QFont font = format.font();

    // 获取当前字体大小
    qreal currentSize = font.pointSizeF();

    //增加字体大小
    qreal newSize = currentSize - 2;

    //设置新的字体大小
    font.setPointSizeF(newSize);

    // 将新的字体应用于格式
    format.setFont(font);

    //把格式设置给选中文本
    cursor.mergeCharFormat(format);

    qDebug()<<"字体变大成功"<<endl;

}
//改变字体颜色
void MainWindow::zitiColor(){
    //选择字体颜色
    QColor color = QColorDialog::getColor(Qt::red,this,"颜色设置");
    //获取文本光标
    QTextCursor cursor = plainTextEdit->textCursor();
    QTextCharFormat format;
    //设置颜色格式
    format.setForeground(color);
    //将颜色设置给当前字体
    cursor.mergeCharFormat(format);
}

测试

改变字体颜色

更改字体大小

新建记事本

查找内容

复制粘贴等

打开记事本

另存为

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/326957.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝莓产量预测(R语言版)

数据描述 字段名 描述 字段名 描述 id 蓝莓唯一标识 MinOfUpperTRange 花期内最高温带日平均气温的最低记录, Clonesize 蓝莓克隆平均大小 AverageOfUpperTRange 花期内最高温带日平均气温, Honeybee 蜜蜂密度 MaxOfLowerTRange 花期内最低温带日平均气温的最…

GEE:机器学习分类中每个类别的概率图像可视化

作者:CSDN @ _养乐多_ 在 Google Earth Engine(GEE) 中应用机器学习分类器进行多分类时,有一个需求是想知道每个像素对于每个类别的分类概率。 比如在进行随机森林分类时,每个决策树会生成一个类别,通过投票选择票数最多的类别作为最终分类。除了最终分类结果,其他类别…

【昕宝爸爸小模块】浅谈之创建线程的几种方式

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…

开源鸿蒙适配芯片到底都做了哪些工作?

随着智能设备市场的不断扩大和技术的进步&#xff0c;鸿蒙操作系统成为了备受瞩目的开源项目。作为一个全场景智能生态的基础&#xff0c;鸿蒙不仅仅是一个操作系统&#xff0c;还涉及到硬件层面的适配。然而&#xff0c;开源鸿蒙芯片适配并非易事&#xff0c;面临着一些难点和…

国内外好用的 LLM 列表

视频来源&#xff1a;https://www.bilibili.com/video/BV1c64y157Qm/?vd_source1e841703c91b5b77fd20e5707bae49d2 下图是测试括号闭合能力的得分

PointMixer: MLP-Mixer for Point Cloud Understanding

Abstract MLP-Mixer 最近崭露头角,成为对抗CNNs和Transformer领域的新挑战者。尽管相比Transformer更为简单,但通道混合MLPs和令牌混合MLPs的概念在图像识别任务中取得了显著的性能。与图像不同,点云本质上是稀疏、无序和不规则的,这限制了直接将MLP-Mixer用于点云理解。为…

推荐系统模型(一) DFN 详解 Deep Feedback Network for Recommendation

背景 在大多数的推荐系统中&#xff0c;往往注重于隐式正反馈(例如&#xff1a;点击)&#xff0c;而忽略掉用户的其他行为(例如大多数CTR模型只考虑用户的喜欢&#xff0c;而忽略了不喜欢)。腾讯在Deep Feedback Network for Recommendation 一文中&#xff0c;提出了一个新颖…

鸿蒙开发工程师会不会有很好的就业前景?

一&#xff0c;鸿蒙带动IT开发和应用整体结构的变革 1月11日&#xff0c;以鸿蒙为首的华为概念股大幅走强&#xff0c;创业板创识科技拉升封板&#xff0c;传智教育、智度股份、高新发展、立达信、吉大正元等多股涨停&#xff0c;华亚电子、九联科技、软通动力、辰奕智能、芯海…

【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(排查问题指令 - 下)

带你一同学习和实践操作Linux服务器必学的Shell指令 前提介绍more和less命令用法more命令命令格式命令参数 常用操作命令案例分析显示文件中从第3行起的内容将日志内容设置为每屏显示4行快速定位和显示文件中包含特定字符串结合管道和more命令来分页显示 less指令命令格式搜索指…

DataFunSummit:2023年云原生大数据峰会:核心内容与学习收获(附大会核心PPT下载)

随着数字化转型的深入推进&#xff0c;大数据技术已经成为企业获取竞争优势的关键因素之一。本次峰会汇聚了业界顶尖的大数据专家、企业领袖和技术精英&#xff0c;共同探讨云原生大数据领域的最新技术和趋势。本文将深入分析峰会的核心内容&#xff0c;并探讨参会者从中能学到…

大数据之谷歌文件系统论文 GFS The Google File System

原文地址 谷歌文件系统论文 摘要 我们设计并实现了Google文件系统&#xff0c;这是一个面向大规模分布式数据密集型应用的可扩展分布式文件系统。 它在廉价的通用硬件上运行&#xff0c;提供了容错性&#xff0c;并向大量客户端提供高聚合性能。 尽管与先前的分布式文件系统…

vue知识-07

ref # 放在组件上&#xff1a; this.$refs.名字 ---组件对象.组件对象.属性 # 在vue项目中使用: // 写在组件上 <HelloWorld ref"my_hello_world"></HelloWorld>handleClick() {console.log(this.$refs)this.$refs.my_hello_world.name # 获取子组件中…

CSS3十大滤镜效果详解

滤镜效果 类似于美颜相机、美图秀秀这样的美颜工具&#xff0c;能够让我们轻松地应用多种特效&#xff0c;例如转换为黑白照片、复古风格化、调整亮度等。在之前仅凭CSS几乎很难做到这些效果。 但在CSS3的语法中&#xff0c;所有的这些视觉特效都是通过“filter”属性来快速实…

基于Java+SSM的技术的社区人口管理系统详细设计和实现【附源码】

基于JavaSSM的技术的社区人口管理系统详细设计和实现 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 …

备份和容灾讲解

备份和容灾 &#xff08;1&#xff09;容灾&#xff08;容许灾难的发生&#xff09;是一种架构方案&#xff0c;包括了很多方案&#xff0c;如下 本地高可用 双活&#xff08;特指存储&#xff0c;可以理解为两端同时对外提供服务&#xff09;&#xff1a;通过一个双写模块把…

【代码随想录06】454. 四数相加 II 383. 赎金信 15. 三数之和 18. 四数之和

目录 454. 四数相加 II题目描述做题思路参考代码 383. 赎金信题目描述做题思路参考代码 15. 三数之和题目描述参考代码 18. 四数之和题目描述参考代码 454. 四数相加 II 题目描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你…

burp靶场——XXE注入

XML 外部实体 (XXE) 注入 1. 什么是xxe漏洞&#xff1a; https://portswigger.net/web-security/xxe#what-is-xml-external-entity-injection XML 外部实体注入&#xff08;也称为 XXE&#xff09;是一种 Web 安全漏洞&#xff0c;允许攻击者干扰应用程序对 XML 数据的处理。…

Go语言认识

Go语言认识 1. Go语言的设计背景2. Go语言的历程3. Go语言对比分析4. Go语言未来的发展规划5. 要不要选择Go 关注 go博客 直接了解第一手资料。 go文档 了解go的全貌。 1. Go语言的设计背景 Go语言&#xff08;也称为Golang&#xff09;是由Google开发的一种编程语言。它的设计…

59.说一下 spring 的事务隔离?

spring 的事务隔离有什么作用? 用来解决并发事务所产生一些问题,并发会产生什么问题? 1.脏读2.不可重复度3.幻影读事务隔离的概念 通过设置隔离级别可解决在并发过程中产生的那些问题分别举例说明 1.脏读 上述图表示:一个事务,读取了另一个事务中没有提交的数据,会在…

LabVIEW高效振动时效处理系统

概述&#xff1a;介绍了一个利用LabVIEW开发的振动时效处理系统&#xff0c;有效降低加工工件的内部残余应力&#xff0c;提升其质量和寿命。 项目背景 工业加工中的工件常存在残余应力问题&#xff0c;这直接影响工件的质量和寿命。虽然热时效和自然时效法被广泛应用于降低残余…