c++ - QTextBrowser:如何突出显示单击的行

标签 c++ qt qt4 qtextedit qtextbrowser

在我的文本浏览器中,我已经实现了 mousePress 并在单击时找到了行号。现在我想突出显示我单击的位置,即更改其背景颜色。我知道线与 block 不同。幸运的是,在我的文本中,一行是一个 block 。所以我做的是通过游标来操作 block 格式,如下所示:

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);

然而,结果很奇怪。当我第一次点击文本时,没有任何反应,有时可能选择了一个词。然后我再次单击,前一行和上面的行将突出显示。我不明白为什么会这样。谁能给我一些解决方案?谢谢。

最佳答案

您的代码甚至无法编译。它使用不存在的 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);
}

关于c++ - QTextBrowser:如何突出显示单击的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22698105/

相关文章:

python - 我如何检查 Qt 或 PyQt 中的空白图像?

c++ - 如何从 C++ 中的基类构造函数调用派生类方法?

c++ - WINAPI ReadProcessMemory 总是相同的地址

c++ - 如何在 rtl 对齐中打开右侧的子菜单?

使用 Inno Setup 安装时,Python/Qt/SQLite3 应用程序不运行

c++ - QExplicitlySharedPointer 和继承

c++ - Windows 任务管理器中的哪个函数用于接收的字节数/间隔?

c++ - 列出目录中的文件,不是递归的,只有文件没有子目录,使用C++

c++ - Qt4:如何为新实例更改 QSpinBox 的默认值(范围、值、单步长)?

c++ - QT中如何以幻灯片方式显示图片?