最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

實(shí)現(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)簽通常用于實(shí)時顯示光標(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)用場景舉例

這種功能常用于:

  • 自定義文本編輯器(如代碼編輯器);
  • 實(shí)現(xiàn)“行號顯示 + 當(dāng)前行高亮”功能;
  • 模擬 IDE 中的光標(biāo)定位與語法高亮;
  • 實(shí)現(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>

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

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

相關(guān)文章

  • C語言預(yù)處理預(yù)編譯命令及宏定義詳解

    C語言預(yù)處理預(yù)編譯命令及宏定義詳解

    這篇文章主要為大家介紹了C語言預(yù)處理預(yù)編譯命令及宏定義的詳解,其中包含運(yùn)行環(huán)境命名約定條件及#under等基礎(chǔ)詳解,有需要的朋友可以借鑒參考下
    2021-10-10
  • C++設(shè)計(jì)模式之組合模式(Composite)

    C++設(shè)計(jì)模式之組合模式(Composite)

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式之組合模式Composite,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • C語言使用ffmpeg實(shí)現(xiàn)單線程異步的視頻播放器

    C語言使用ffmpeg實(shí)現(xiàn)單線程異步的視頻播放器

    這篇文章主要為大家詳細(xì)介紹了C語言如何使用ffmpeg實(shí)現(xiàn)單線程異步的視頻播放器功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下
    2022-12-12
  • C語言超詳細(xì)講解字符串相乘

    C語言超詳細(xì)講解字符串相乘

    這篇文章主要介紹了用C語言如何來實(shí)現(xiàn)字符串相乘的方法,這里我們會利用到memset函數(shù),memset函數(shù)是對較大的結(jié)構(gòu)體或數(shù)組進(jìn)行清零操作的一種最快方法,可以說是初始化內(nèi)存的“萬能函數(shù)”,下面我們詳細(xì)了解一下
    2022-03-03
  • c語言求兩個字符串的交集

    c語言求兩個字符串的交集

    大家好,本篇文章主要講的是c語言求兩個字符串的交集,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 詳解如何在VS2019和VScode中配置C++調(diào)用python接口

    詳解如何在VS2019和VScode中配置C++調(diào)用python接口

    這篇文章主要介紹了詳解如何在VS2019和VScode中配置C++調(diào)用python接口,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C++特殊類設(shè)計(jì)及類型轉(zhuǎn)換舉例詳解

    C++特殊類設(shè)計(jì)及類型轉(zhuǎn)換舉例詳解

    這篇文章主要介紹了C++中如何設(shè)計(jì)不能被拷貝、只能在堆上或棧上創(chuàng)建對象的類、不能被繼承的類以及單例模式的實(shí)現(xiàn)方法,還討論了C++中的類型轉(zhuǎn)換,需要的朋友可以參考下
    2025-05-05
  • C/C++錯誤信息處理的常見方法及函數(shù)

    C/C++錯誤信息處理的常見方法及函數(shù)

    C/C++是兩種廣泛使用的編程語言,特別是在系統(tǒng)編程、嵌入式開發(fā)以及高性能計(jì)算領(lǐng)域,這篇文章主要介紹了C/C++錯誤信息處理的常見方法及函數(shù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • C++中實(shí)現(xiàn)位運(yùn)算的示例代碼

    C++中實(shí)現(xiàn)位運(yùn)算的示例代碼

    位運(yùn)算是對二進(jìn)制數(shù)的每一位進(jìn)行的操作,本文介紹了計(jì)算機(jī)中的位運(yùn)算概念及常見操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • 單鏈表實(shí)現(xiàn)反轉(zhuǎn)的3種方法示例代碼

    單鏈表實(shí)現(xiàn)反轉(zhuǎn)的3種方法示例代碼

    單鏈表的反轉(zhuǎn)是常見的面試題目,下面這篇文章主要給大家介紹了關(guān)于單鏈表實(shí)現(xiàn)反轉(zhuǎn)的3種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02

最新評論

东阿县| 泾阳县| 上栗县| 天水市| 荥经县| 炉霍县| 新营市| 黔江区| 白河县| 高陵县| 柞水县| 太白县| 黄龙县| 博野县| 包头市| 新密市| 汉川市| 东兴市| 胶南市| 长岛县| 长治市| 南木林县| 周至县| 宜春市| 长春市| 梁河县| 丰原市| 镇安县| 大埔县| 宜昌市| 怀宁县| 大兴区| 青州市| 清涧县| 抚宁县| 新宾| 米脂县| 廊坊市| 子洲县| 河西区| 柳河县|