在我的文本浏览器中,我已经实现了mousePress并在点击时找到了行号。现在我想突出显示我点击的位置,即更改其背景颜色。我知道线与块不同。幸运的是,在我的文本中,一行是一个块。所以我所做的是用光标操作块格式,如下所示:
QTextCursor cur = mytextBrowser->textCursor();
QBlockFormat f;
f.setBackground(Qt::red);
cur.selection(QTextCursor::BlockUnderCursor);
cur.setBlockFormat(f);
cur.setPosition(startPos);//I calculate this startPos before. It's where the cursor should be
mytextBrowser->setTextCursor(cur);
然而,结果很奇怪。当我第一次点击文本时,没有任何反应,有时可能会选择一个单词。然后我再次点击,上一行和上面的行将突出显示。我不明白为什么会这样。有人能给我一些解决方案吗?感谢。
答案 0 :(得分:1)
您的代码甚至无法编译。它使用不存在的QBlockFormat
类和使用无效参数的cur.selection
。你刚从脑袋里打出来的吗?无论如何,为什么不使用LineUnderCursor
?以下代码适用于我:
void MainWindow::on_textBrowser_cursorPositionChanged() {
QTextCursor cur = ui->textBrowser->textCursor();
QTextBlockFormat f;
f.setBackground(Qt::red);
cur.select(QTextCursor::LineUnderCursor);
cur.setBlockFormat(f);
ui->textBrowser->setTextCursor(cur);
}
答案 1 :(得分:0)
这是我使用它适用于QTextEdit和QTextBrowser:
textBrowser在下面的示例中是QTextBrowser。
void MainWindow::on_textBrowser_cursorPositionChanged(){
QTextBrowser::ExtraSelection selection ;
QColor lineColor = QColor(201, 191, 253, 15);
selection.format.setBackground(lineColor);
selection.format.setProperty(QTextFormat::FullWidthSelection, true);
selection.cursor = ui->textBrowser->textCursor();
selection.cursor.clearSelection();
extraSelections.append(selection);
ui->textBrowser->setExtraSelections(extraSelections);
}