文本高亮

文本高亮

自定义类 MySyntaxHighlighter 继承 QSyntaxHighlighter,并重写它的虚函数 highlightBlock(const QString &text)实现自定义高亮

Qt 的 QSyntaxHighlighter 框架会自动调用这个重写的函数

// 重写 QSyntaxHighlighter 的虚函数 highlightBlock
// Qt 会在需要高亮每一行文本时自动调用这个函数
void MySyntaxHighlighter::highlightBlock(const QString &text)
{
    // 定义高亮格式(字体、粗细、颜色等)
    QTextCharFormat myFormat;
    myFormat.setFont(QFont("微软雅黑"));       // 设置字体
    myFormat.setFontWeight(QFont::Bold);       // 设置加粗
    myFormat.setForeground(Qt::green);         // 设置前景色(文字颜色为绿色)

    // 定义要匹配的正则表达式:单词 "char"
    // \b 表示单词边界,确保只匹配完整的 "char"
    QString pattern = "\\bchar\\b";
    QRegularExpression express(pattern);

    int from = 0;  // 搜索起始位置
    while (true) {
        // 在 text 中从位置 from 开始查找匹配
        QRegularExpressionMatch match = express.match(text, from);
        if (!match.hasMatch())
            break;  // 没有匹配到则退出循环

        // 获取匹配的起始位置
        int index = match.capturedStart(0);
        // 获取匹配文本的长度(captured(0) 表示整个匹配到的字符串)
        int matchLen = match.captured(0).length();

        // ✅ 应用高亮:从 index 开始,长度为 matchLen 的字符设置为 myFormat 样式
        setFormat(index, matchLen, myFormat);

        // 输出调试信息,方便查看匹配位置和长度
        qDebug() << "Highlight at" << index << "length" << matchLen;

        // 更新搜索起点,避免死循环
        from = index + matchLen;
    }
}
posted @ 2025-08-18 00:01  xiaoluosibky  阅读(18)  评论(0)    收藏  举报