2014-03-27 5 views
1

내 textbrowser에서 이미 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 대신 사용 하시겠습니까? 다음 코드는 나를 위해 잘 작동 :

textBrowser 아래 예에서 QTextBrowser입니다 :

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 모두를 위해 작동하는 무슨 내가 사용하는 것입니다.

 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); 
     } 
관련 문제