【问题标题】:QTextBrowser: How to highlight a clicked lineQTextBrowser:如何突出显示单击的行
【发布时间】:2014-03-27 20:05:51
【问题描述】:

在我的文本浏览器中,我已经实现了 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);

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

【问题讨论】:

    标签: c++ qt qt4 qtextedit qtextbrowser


    【解决方案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);
    }
    

    【讨论】:

    • 谢谢。其实我用的方法和你给的一样。这些是拼写错误,因为真正的代码在没有互联网的计算机中,所以我必须手动输入它们。无论如何,在这种方法中,问题是当我单击一行时,比如 5,它没有响应。但是,下次我单击另一行时,第 5 行将突出显示。你能告诉我为什么吗??
    • 基本上,这是正确的答案。但我认为不需要“ui->textBrowser->setTextCursor(cur)”,因为它可能会导致额外的突出显示。此外,在我的程序中,我计算了单击的光标位置并使用 setCursorPosition。无论如何,非常感谢!
    【解决方案2】:

    这是我使用的,它适用于 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);
            }
    

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      • 2019-04-01
      • 2011-05-03
      • 1970-01-01
      • 2012-08-24
      • 2011-09-20
      相关资源
      最近更新 更多