亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Qt如何實現(xiàn)文本編輯器光標(biāo)高亮技術(shù)

 更新時間:2025年06月20日 16:37:23   作者:范紋杉好好生活工作  
這篇文章主要為大家詳細(xì)介紹了Qt如何實現(xiàn)文本編輯器光標(biāo)高亮技術(shù),文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以了解下

實現(xiàn)代碼

void Widget::oncursorPositionChanged()
{
    QTextCursor cursor = ui->textEdit->textCursor();
    //qDebug() << cursor.blockNumber() + 1 << ", "<< cursor.columnNumber() + 1;
    QString blockNum = QString::number(cursor.blockNumber() + 1);
    QString columnNumber = QString::number(cursor.columnNumber() + 1);
    const QString labelMes = "列:" + blockNum + ", 行:" + columnNumber;
    ui->labelPosition->setText(labelMes);
 
    //    設(shè)置當(dāng)前行高亮
    QList<QTextEdit::ExtraSelection> extraSelections;
    QTextEdit::ExtraSelection ext;
 
    //    1,知道當(dāng)前行
    ext.cursor = ui->textEdit->textCursor();
    QBrush qBrush(Qt::yellow);
 
    //    2,顏色
    ext.format.setBackground(qBrush);
    //   配置段屬性:整行顯示,沒有這句話不行
    ext.format.setProperty(QTextFormat::FullWidthSelection, true);
 
    //    3,設(shè)置
    //把ext加到ext的容器中
    extraSelections.append(ext);
    ui->textEdit->setExtraSelections(extraSelections);
}
//解釋這串代碼,寫上注釋,并仔細(xì)闡述里面用到了什么技術(shù)?

下面是對這段代碼的逐行詳細(xì)注釋 + 技術(shù)解析,幫助你全面理解它的功能和背后使用的技術(shù)。

函數(shù)作用概述

void Widget::oncursorPositionChanged()

這是一個 槽函數(shù)(slot),當(dāng) QTextEdit 的光標(biāo)位置發(fā)生變化時自動觸發(fā)。它用于:

獲取當(dāng)前光標(biāo)所在的行列號;

在界面上顯示該信息(例如:“列:1, 行:3”);

高亮顯示當(dāng)前光標(biāo)所在的整行內(nèi)容;

代碼詳解 + 注釋

    // 獲取 QTextEdit 中的當(dāng)前光標(biāo)對象
    QTextCursor cursor = ui->textEdit->textCursor();

QTextCursor 是 Qt 提供的一個類,用于操作文本內(nèi)容;

它記錄了光標(biāo)的位置、選區(qū)等信息;

textCursor() 返回當(dāng)前的光標(biāo)狀態(tài)。

    // 將行號和列號轉(zhuǎn)為字符串
    QString blockNum = QString::number(cursor.blockNumber() + 1);
    QString columnNumber = QString::number(cursor.columnNumber() + 1);

cursor.blockNumber():返回當(dāng)前光標(biāo)所在的段落編號(從 0 開始),即“行號”;

cursor.columnNumber():返回當(dāng)前光標(biāo)在該行中的字符偏移量,即“列號”;

+1 是為了將索引從 0 轉(zhuǎn)換為更直觀的“第1行第1列”;

QString::number(...) 將整數(shù)轉(zhuǎn)換為字符串。

    const QString labelMes = "列:" + blockNum + ", 行:" + columnNumber;
    ui->labelPosition->setText(labelMes);

構(gòu)造一個格式化的字符串,如 "列:3, 行:5";

顯示在界面中的 QLabel 控件上,控件名為 labelPosition;

這個標(biāo)簽通常用于實時顯示光標(biāo)位置。

使用 QTextEdit 的高亮技術(shù)(重點(diǎn))

1. 創(chuàng)建額外選擇區(qū)域列表

    QList<QTextEdit::ExtraSelection> extraSelections;

QTextEdit::ExtraSelection 是 Qt 提供的一種機(jī)制,允許你在文本編輯器中自定義高亮顯示區(qū)域;

可以設(shè)置背景色、前景色、字體樣式等;

QList<...> 是 Qt 的容器類,用來保存多個高亮區(qū)域。

QTextEdit::ExtraSelection ext;

創(chuàng)建一個 ExtraSelection 對象,表示一個要高亮的區(qū)域;

后續(xù)會配置這個對象,并添加到 extraSelections 列表中。

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

設(shè)置高亮區(qū)域的光標(biāo)范圍;

這里直接使用當(dāng)前光標(biāo),表示高亮“當(dāng)前行”的內(nèi)容。

QBrush qBrush(Qt::yellow);

創(chuàng)建一個畫刷對象,顏色為黃色;

用于設(shè)置高亮的背景色。

ext.format.setBackground(qBrush);

設(shè)置高亮區(qū)域的格式,這里是設(shè)置背景色為黃色;

QTextCharFormat 是格式描述對象,支持多種樣式設(shè)置。

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

設(shè)置該區(qū)域的格式屬性為“全寬選擇”,即整行高亮;

否則只會高亮光標(biāo)所在字符位置,而不是整行。

extraSelections.append(ext);

將配置好的高亮區(qū)域加入列表中。

ui->textEdit->setExtraSelections(extraSelections);

將高亮區(qū)域應(yīng)用到 textEdit 控件;

此后,當(dāng)前光標(biāo)所在的整行就會被黃色高亮顯示。

總結(jié)用到的關(guān)鍵技術(shù)點(diǎn)

技術(shù)名稱描述
QTextCursor用于獲取或操作文本編輯器中的光標(biāo)位置和內(nèi)容
QTextEdit::ExtraSelection允許在 QTextEdit 中自定義高亮顯示區(qū)域
QTextCharFormat文本字符格式設(shè)置類,可設(shè)置背景色、字體、大小等
QBrush畫刷類,用于設(shè)置背景顏色或圖案
QList<T>Qt 提供的泛型容器類,用于管理多個對象
QString::number()將數(shù)字轉(zhuǎn)換為字符串,用于顯示
setText()QLabel 常用方法,更新界面上的文字

應(yīng)用場景舉例

這種功能常用于:

  • 自定義文本編輯器(如代碼編輯器);
  • 實現(xiàn)“行號顯示 + 當(dāng)前行高亮”功能;
  • 模擬 IDE 中的光標(biāo)定位與語法高亮;
  • 實現(xiàn)富文本編輯器中的自定義樣式區(qū)域;

示例優(yōu)化建議

你可以將上面的代碼封裝成一個函數(shù),便于復(fù)用:

void Widget::updateCursorPositionInfo()
{
    QTextCursor cursor = ui->textEdit->textCursor();
 
    int line = cursor.blockNumber() + 1;
    int col = cursor.columnNumber() + 1;
 
    QString info = QString("行:%1,列:%2").arg(line).arg(col);
    ui->labelPosition->setText(info);
 
    QTextEdit::ExtraSelection selection;
    selection.format.setBackground(Qt::yellow);
    selection.format.setProperty(QTextFormat::FullWidthSelection, true);
    selection.cursor = cursor;
 
    QList<QTextEdit::ExtraSelection> selections;
    selections.append(selection);
 
    ui->textEdit->setExtraSelections(selections);
}

然后在 oncursorPositionChanged() 中調(diào)用即可:

void Widget::oncursorPositionChanged()
{
    updateCursorPositionInfo();
}

如果你希望我?guī)湍悖?/p>

  • 添加行號顯示功能;
  • 支持多行高亮;
  • 或者實現(xiàn)類似 VS Code 的編輯器界面;

到此這篇關(guān)于Qt如何實現(xiàn)文本編輯器光標(biāo)高亮技術(shù)的文章就介紹到這了,更多相關(guān)Qt文本高亮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文快速掌握C++雙端數(shù)組容器deque的使用

    一文快速掌握C++雙端數(shù)組容器deque的使用

    本文和大家分享的是和vector容器功能很像的容器——deque,了解deque容器的本質(zhì),使用方法以及與vector容器的不同之處,感興趣的快跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C++實現(xiàn)字符串轉(zhuǎn)整數(shù)(atoi)的代碼詳解

    C++實現(xiàn)字符串轉(zhuǎn)整數(shù)(atoi)的代碼詳解

    在編程中,經(jīng)常會遇到將字符串轉(zhuǎn)換為整數(shù)的需求,就像標(biāo)準(zhǔn)庫中的 atoi 函數(shù)一樣,本文給大家介紹了C++中字符串轉(zhuǎn)整數(shù)(atoi)的實現(xiàn)與解析,并有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2025-04-04
  • Opencv 馬賽克和毛玻璃效果與圖片融合的實現(xiàn)

    Opencv 馬賽克和毛玻璃效果與圖片融合的實現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了通過OpenCV實現(xiàn)馬賽克和毛玻璃濾鏡效果與圖片的融合,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • c++實現(xiàn)簡單隨機(jī)數(shù)的代碼

    c++實現(xiàn)簡單隨機(jī)數(shù)的代碼

    在本篇文章里小編給大家整理的是一篇關(guān)于c++實現(xiàn)簡單隨機(jī)數(shù)的代碼內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。
    2021-05-05
  • C語言結(jié)構(gòu)體定義的方法匯總

    C語言結(jié)構(gòu)體定義的方法匯總

    結(jié)構(gòu)體是一種工具,用這個工具可以定義自己的數(shù)據(jù)類型。下面通過本文給大家分享了C語言結(jié)構(gòu)體定義的方法匯總,需要的朋友參考下吧
    2017-12-12
  • 適合初學(xué)者的C語言字符串講解

    適合初學(xué)者的C語言字符串講解

    字符串主要用于編程,概念說明、函數(shù)解釋、用法詳述見正文,這里補(bǔ)充一點(diǎn):字符串在存儲上類似字符數(shù)組,所以它每一位的單個元素都是可以提取的
    2022-04-04
  • C語言模擬實現(xiàn)掃雷游戲

    C語言模擬實現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語言模擬實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • C++ 讓函數(shù)返回數(shù)組的方法

    C++ 讓函數(shù)返回數(shù)組的方法

    這篇文章主要介紹了C++ 讓函數(shù)返回數(shù)組的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C語言詳細(xì)實現(xiàn)猜拳游戲流程

    C語言詳細(xì)實現(xiàn)猜拳游戲流程

    在學(xué)習(xí)了循環(huán)、分支、和函數(shù)之后,可以寫一些簡單的小游戲來給自己的編程之路增添一份樂趣。不僅提升了編碼能力,還可以邊學(xué)邊玩,簡直妙哉妙哉
    2022-05-05
  • C++ 字符串string和整數(shù)int的互相轉(zhuǎn)化操作

    C++ 字符串string和整數(shù)int的互相轉(zhuǎn)化操作

    這篇文章主要介紹了C++ 字符串string和整數(shù)int的互相轉(zhuǎn)化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論