Qt学习笔记第61到70讲

第61讲 记事本实现当前行高亮功能

实现策略: 获取当前行的光标位置,使用的信号和获取行列值是一样的,即通过ExtraSelection 来配置相关属性。
关键API:

cpp 复制代码
QList<QTextEdit::ExtraSelection> extraSelections;
void setExtraSelections(const QList<QTextEdit::ExtraSelection> &extraSelections)

ExtraSelection类内部有两个公有成员变量:

其中cursor可以存储获取的光标当前位置信息(比如行数),format用来存储文本样式属性。

综上所述,当前行高亮这个功能的实现还是需要在光标点击的响应槽函数onCursorPositionChanged内部。

第一步,声明了一个 QList 容器 extraSelections,用于存储 QTextEdit::ExtraSelection 类型的元素,并且明了一个 QTextEdit::ExtraSelection(结构体) 类型的变量 ext;

cpp 复制代码
QList <QTextEdit::ExtraSelection> extraSelections;
QTextEdit::ExtraSelection ext;

第二步,利用textEdit内部的textCursor方法获取当前行信息;

cpp 复制代码
 ext.cursor=ui->textEdit->textCursor();

第三步,开始配置颜色,创建了一个 QBrush 对象 qBrush,并使用 Qt::lightGray 颜色初始化它,然后通过 ext.format.setBackground(qBrush) 这行代码,将创建好的画刷所代表的颜色(浅灰色)设置为 ext 这个 ExtraSelection 实例对应的文本格式(ext.format)的背景颜色;

cpp 复制代码
QBrush qBrush(Qt::lightGray);
ext.format.setBackground(qBrush);

第四步,利用setProperty方法配置段属性为整行显示

cpp 复制代码
 ext.format.setProperty(QTextFormat::FullWidthSelection,true);

这行代码调用了 ext.formatQTextCharFormat 类型,用于设置文本的字符格式相关属性)的 setProperty 方法,将 QTextFormat::FullWidthSelection 属性设置为 trueQTextFormat::FullWidthSelection 这个属性表示文本选择区域按照整行的宽度来显示,确保不仅仅是当前光标所在处的文本有背景颜色等样式设置,而是整行文本都会应用之前配置的背景颜色(也就是浅灰色),实现整行高亮的效果。

第五步,进行整体配置

cpp 复制代码
extraSelections.append(ext);
ui->textEdit->setExtraSelections(extraSelections);

第一行 extraSelections.append(ext) 将配置好的 ext(代表当前行的额外选择区域相关属性)添加到 extraSelections 列表中。最后一行 ui->textEdit->setExtraSelections(extraSelections) 则调用了 textEdit 部件的 setExtraSelections 方法,将包含了当前行额外选择区域配置信息的 extraSelections 列表传递进去,使得 textEdit 部件按照这个列表里定义的规则(这里就是当前行高亮的相关属性设置)来更新其显示效果,最终实现在文本编辑部件中当前行被高亮显示的功能。

最后整个槽函数:

cpp 复制代码
void Widget::onCursorPositionChanged(void)
{
    QTextCursor cursor=ui->textEdit->textCursor();
    //qDebug()<<cursor.blockNumber()+1 <<cursor.columnNumber()+1;

    QString blockNum=QString::number(cursor.blockNumber()+1);
    QString columnNum=QString::number(cursor.columnNumber()+1);
    const QString labelMes="L:"+blockNum+" "+"C:"+columnNum;

    ui->labelPositon->setText(labelMes);

    /*设置当前行高亮*/
    //0.声明了一个 QList 容器 extraSelections
    QList <QTextEdit::ExtraSelection> extraSelections;
    //同时声明了ext这个结构体变量
    QTextEdit::ExtraSelection ext;

    //1.获取当前行的数值
    ext.cursor=ui->textEdit->textCursor();
    //2.配置颜色
    QBrush qBrush(Qt::lightGray);
    ext.format.setBackground(qBrush);
    //3.配置段属性,整行显示
    ext.format.setProperty(QTextFormat::FullWidthSelection,true);
    //4.整体配置
    extraSelections.append(ext);
    ui->textEdit->setExtraSelections(extraSelections);

}

运行效果:

相关推荐
我命由我123455 分钟前
Photoshop - Photoshop 工具栏(47)油漆桶工具
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop
客梦9 分钟前
数据结构--队列
数据结构·笔记
colus_SEU11 分钟前
【计算机网络笔记】第四章 网络层的数据平面
笔记·计算机网络
蒙奇D索大11 分钟前
【数据结构】排序算法精讲 | 快速排序全解:分治思想、核心步骤与示例演示
数据结构·笔记·学习·考研·算法·排序算法·改行学it
iconball13 分钟前
个人用云计算学习笔记 --29 华为云网络云服务
运维·笔记·学习·华为云·云计算
YJlio1 小时前
Contig 学习笔记(13.4):单文件碎片整理工具的原理与基本用法
笔记·学习·stable diffusion
石像鬼₧魂石9 小时前
HexStrike-AI人工智能 渗透测试学习(Metasploitable2 192.168.1.4)完整流程总结
学习·ubuntu
非凡ghost9 小时前
MusicPlayer2(本地音乐播放器)
前端·windows·学习·软件需求
大数据追光猿9 小时前
【大数据Doris】生产环境,Doris主键模型全表7000万数据更新写入为什么那么慢?
大数据·经验分享·笔记·性能优化·doris
sevenez9 小时前
Vibe Coding 实战笔记:从“修好了C坏了AB”到企业级数据库架构重构
c语言·笔记·数据库架构