2014-03-27 68 views
1

在我的文本瀏覽器中,我已經實現了mousePress並在點擊時找到了行號。現在我想突出顯示我點擊的位置,即更改其背景顏色。我知道線與塊不同。幸運的是,在我的文本中,一行是一個塊。所以,我沒有什麼是通過操縱光標塊格式如下:QTextBrowser:如何突出點擊線

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

但是,結果是奇數。當我第一次點擊文本時,什麼也沒有發生,有時候可能會選擇一個詞。然後我再次點擊,上一行和上面的行會突出顯示。我不明白爲什麼會發生這種情況。誰能給我一些解決方案?謝謝。

回答

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); 
} 
+0

謝謝。其實我用的是和你一樣的方式。這些都是拼寫錯誤,因爲真正的代碼是在沒有互聯網的計算機上,所以我必須手動鍵入它們。無論如何,在這種方法中,問題是當我點擊一行時,說5,它沒有迴應。但是,下次單擊另一行時,第5行將突出顯示。你能告訴我爲什麼? – TonyLic

+0

基本上,這是正確的答案。但我認爲「ui-> textBrowser-> setTextCursor(cur)」是不需要的,因爲它可能會導致額外的高亮。另外,在我的程序中,我計算光標位置點擊並使用setCursorPosition。無論如何,非常感謝! – TonyLic

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