【问题标题】:QScintilla highlight match wordsQScintilla 高亮匹配词
【发布时间】:2014-07-13 22:39:16
【问题描述】:

我试图突出显示编辑器上的所有匹配词,但似乎无法弄清楚如何正确突出显示文本。我可以成功地遍历所有找到的匹配项,但似乎找不到正确的调用来突出显示它。这是我的代码:

bool found = true;  

while(found)
{
    editor->getCursorPosition(&line, &index);

    qDebug() << "line: " << line << " index: " << index;

    found = editor->findFirst(pattern, use_regular_expression, is_case_sensitive, match_whole_word_only, use_wrap, search_forward);

    if(found)
    {
        int start = editor->positionFromLineIndex(line, index);
        int end = editor->positionFromLineIndex(line, index + pattern.length());

        qDebug() << "line: " << line << " start: " << start << " end: " << end;

        // Attempts to highlight
        editor->SendScintilla(QsciScintilla::SCI_INDICGETSTYLE, QsciScintilla::INDIC_BOX);
        editor->SendScintilla(QsciScintilla::SCI_INDICSETFORE, 0x007f00);
        //child[0]->SendScintilla(QsciScintilla::SCI_INDICATORFILLRANGE, start, end - start);
        editor->SendScintilla(QsciScintilla::SCI_INDICATORFILLRANGE, start, end - start);
        editor->setIndicatorForegroundColor(QColor(159, 144, 0));
      //  editor->setColor(QColor(159, 144, 0));**
    }
}

我的 qDebug() 显示它遍历每一行并找到匹配项和单词出现的位置。但是注释 // Attempts to highlight 下的代码是我似乎无法弄清楚的地方。有什么建议吗?

【问题讨论】:

    标签: qt qscintilla


    【解决方案1】:

    你可以试试。

    SendScintilla(QsciScintillaBase::SCI_INDICSETSTYLE,0, INDIC_BOX);
    
    QString docText = text();
    int end = docText.lastIndexOf(findText);
    int cur = -1; 
    
    if(end != -1) {
    
       while(cur != end) {
            cur = docText.indexOf(findText,cur+1);`
            SendScintilla(QsciScintillaBase::SCI_INDICATORFILLRANGE,cur,
                findText.length());
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-12-30
      • 2014-05-28
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 2022-12-07
      • 1970-01-01
      • 2015-05-13
      • 2021-09-27
      相关资源
      最近更新 更多