当前位置: 首页 > news >正文

学习C++、QT---26(QT中实现记事本项目实现文件路径的提示、现在我们来学习一下C++类模板、记事本的行高亮的操作的讲解)

记事本项目实现文件路径的提示

我们来设置一下这个样式,就是我们打开文件后一般都会显示一个文件的路径的,那么我们来实现一下

这个很简单记住这个

 this->setWindowTitle(fileName+"---MyNoteBook");这一行代码就是实现这个的

打开的时候标题是这个,filename是文件的路径拼接上自己想要的字符我这边是MyNoteBook

保存也是一样的

关闭也设置一个

就是这个this->setWindowTitle();这个函数发挥的神力

当然我们要记得我们打开记事本的时候是在这边,也就是刚开记事本程序后,没有打开,也没有保存和关闭的时候的设置的名字在这边设置

就是这样实现

现在我们来学习一下C++类模板

我们这个类模板在Java里面叫做泛型

什么意思呢?

很好理解

直接上代码

会发现我去我们使用相同的结构的代码进行输出字符串和数字,几乎都是使用一个几乎一样的语法,但是我们如果要写字符串和数字的话要写两个,代码量很大,所以有一个叫做类模板的出现了

前提是在类之前写出声明

template<typename  T>这个很重要就是表示我这个T的来源,也是说明了现在这个不是一个类,而是类模板,所以template这个不就叫做模板嘛,很好记的

怎么使用呢?

 printEvering<intp1;

这个就是说明我们使用int类型作为参数来进行代替T,所以我们的模板上面的T都会在代码运行的时候替换成int,如果是想要用String类型那么就用

 printEvering<string> p1;

这样来设置,那么我们就可以省去很多的代码,最主要的就是让我们知道类模板这个写法和作用,对我们后面实现行高亮有作用

记事本的行高亮的操作

来吧我们来实现记事本的行高亮的操作

代码如下

解释代码:

那么我们这边要知道,我们要进行行的高亮设置的话,那么就需要我们对TextEdit进行设置,那么我们如果没有思路那么我们就去查看文档,发现QTextEdit这边有一个信号是叫做这个cursorPositionChanged()

这个就是对应着我们光标的位置的变化而变化,那么我们是否可以通过光标的变化而设置光标对应行的高亮呢?我们猜大概率就是这个样子

那么我们先去实现信号与槽的绑定,随后实现槽函数

怎么实现槽函数呢?

那我们去找QTextEdit里面是否有对应的方法,用来设置行高亮的

我们发现这个是可以实现这个行高亮功能的

QTextEdit::setExtraSelections() 是 Qt 中用于在文本编辑区域临时高亮显示特定文本区域的功能。它允许你在不修改原始文档内容的情况下,为某些文本区域添加自定义样式(如背景色、前景色、边框等),常用于实现代码编辑器中的断点标记、语法错误提示、搜索结果高亮等场景。

核心功能

  • 临时高亮:不改变文档内容,仅视觉上标记特定区域。
  • 多区域支持:可同时高亮多个不连续的文本片段。
  • 自定义样式:每个高亮区域可单独设置背景色、前景色、边框等。

那么我们会发现是这个QList<QTextEdit::ExtraSelection>这样的写法啊,这个就是我们之前写的C++类模板啊

QList<QTextEdit::ExtraSelectionextraSelection;

   QTextEdit::ExtraSelection ext;

   QBrush qBrush(Qt::lightGray);

   ext.cursor = ui->textEdit->textCursor();

   ext.format.setBackground(qBrush);

   ext.format.setProperty(QTextFormat::FullWidthSelection,true);

   extraSelection.append(ext);

   ui->textEdit->setExtraSelections(extraSelection);

void QTextEdit::setExtraSelections(const QList<QTextEdit::ExtraSelection> &selections)

那我们没有这个QList这个类型的参数啊,那么我们就自己创建一个

 QTextEdit::ExtraSelection ext;

那我们会发现还是不行啊,我们再看,发发现这个QTextEdit::ExtraSelection 

这个类有两个变量一个叫做cursor  一个叫做format

这个cursor是就是讲行信息给我们的ext对象的,还有format是用来设置所选内容的背景格式的颜色什么的

那么我们

ext.cursor 这个是一个变量,需要通过我们的 ui->textEdit->textCursor();这个进行赋值,因为这个textCursor就是返回光标信息的,那我们将光标信息都赋给ext.cursor这样我们的ext就知道我们这个光标所在的行是在哪行了

随后我们将 ext.format.setBackground(qBrush);进行设置背景颜色

前提是我们要先讲QBrush设置好 ,因为这个setBackground的参数是QBush

QBrush qBrush(Qt::lightGray);这个颜色的话可以有很多种的

颜色可以有很多种

还有一个重要的是

ext.format.setProperty(QTextFormat::FullWidthSelection, true) 的作用是让高亮效果覆盖整行,无论光标是否选中了整行的所有文本。这在实现类似代码编辑器中的 “当前行高亮” 功能时非常有用。

具体解释

  • QTextFormat::FullWidthSelection:是 QTextFormat 的一个属性,用于控制是否将格式应用到整行。
  • true:启用整行选择模式。

当你设置这个属性为 true 时:

  • 即使光标只选中了行内的部分文本(如一个单词),高亮效果也会扩展到整行的宽度。
  • 整行的背景会被统一设置为指定的颜色,增强视觉区分度。

最后需要将我们的元素添加到我们的这个extraSelection这个集合中

extraSelection.append(ext);

所以说真正发挥作用的是我们的这个ext这个元素,extraSelection这个的话只是QList的容器名字

展示效果:


文章转载自:
http://backed.bdypl.cn
http://adrenocortical.bdypl.cn
http://americana.bdypl.cn
http://bridecake.bdypl.cn
http://calculous.bdypl.cn
http://beeswax.bdypl.cn
http://bracteole.bdypl.cn
http://alpinism.bdypl.cn
http://bobsled.bdypl.cn
http://archaize.bdypl.cn
http://baffling.bdypl.cn
http://canaanitic.bdypl.cn
http://cenote.bdypl.cn
http://carriageable.bdypl.cn
http://accompanyist.bdypl.cn
http://bias.bdypl.cn
http://amid.bdypl.cn
http://butyrate.bdypl.cn
http://atomarium.bdypl.cn
http://apocope.bdypl.cn
http://barcarole.bdypl.cn
http://chopsocky.bdypl.cn
http://bedehouse.bdypl.cn
http://beet.bdypl.cn
http://arginase.bdypl.cn
http://arcticologist.bdypl.cn
http://brothel.bdypl.cn
http://caucus.bdypl.cn
http://apractic.bdypl.cn
http://bleachers.bdypl.cn
http://www.dtcms.com/a/280979.html

相关文章:

  • 简单易懂,操作系统的内存管理机制是如何实现的
  • Python初学者笔记第二十期 -- (文件IO)
  • kimi-k2模型配置参数
  • vector的简单实现及常用接口
  • I/O 多路复用详解笔记
  • 笔试——Day8
  • CentOS 7 Linux 离线安装 docker-compose
  • 【PTA数据结构 | C语言版】层序遍历二叉树
  • SQLlite下载以及简单使用
  • AI创作系列第19篇:海狸IM 20250714版本重磅升级 - 移动端UI全面焕新
  • linux的磁盘满了清理办法
  • 图机器学习(7)——图神经网络 (Graph Neural Network, GNN)
  • 【10】如何对图像进行分割(下)
  • 删除k8s卸载后残留挂载点目录
  • 【群晖NAS】云服务器与群晖NAS(无公网)的FRP内网穿透之旅
  • Kimi K2 替换 Claude Code 默认模型
  • AI-Compass Embedding模型模块:15+主流向量化技术的多模态语义表示生态,涵盖文本图像音频嵌入、RAG检索增强、向量数据库集成与工程化实践
  • 进程创建与退出的原理
  • 5.数据归一化
  • Paimon 删除向量
  • 元宇宙经济:虚实交融下的数字文明新范式
  • Python 函数:从“是什么”到“怎么用”的完整指南
  • 【Linux驱动-快速回顾】一文快速理解GIC内部寄存器对中断的控制
  • Claude技术全景解读:从安全聊天机器人到自主智能体的演进之路
  • 数据结构自学Day7-- 二叉树
  • 项目总体框架(servlet+axios+Mybatis)
  • ue4 houdini pivot painter 学习笔记
  • 可微分3D高斯溅射(3DGS)在医学图像三维重建中的应用
  • OpenCV 对数变换函数logTransform()
  • ubuntu22.04 软创建 RAID1 与配置流程