QTextBrowser: Как выделить линию, по которой щелкнули

В моем текстовом браузере я уже реализовал 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);

Тем не менее, результат странный. Когда я впервые нажимаю на текст, ничего не происходит, иногда может быть выбрано слово. Затем я снова нажимаю, чтобы предыдущая строка и строка выше были выделены. Я не понимаю, почему это произошло. Кто-нибудь может дать мне несколько решений? Благодарю.

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

Другие решения

Вот что я использую, это работает как для 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);
}
0

По вопросам рекламы [email protected]