Получение только видимого текста из виджета QTextEdit

Я искал в течение дня и не нашел ответа на этот вопрос. Этот поток Как сделать Я получаю текущий видимый текст из виджета QTextEdit или QPlainTextEdit? просто отвечает, как получить ВЕСЬ текст, содержащийся в виджете.

В моей ситуации у меня есть QTextWidget с большим количеством текста. Гораздо больше, чем может быть отображено в любой момент времени. Я хотел бы отреагировать на изменение видимого текста, а затем предпринять некоторые действия.

Когда пользователь прокручивает текстовую область или в виджет добавляется новый текст, я хотел бы выполнить какое-либо действие с видимым текстом. Я могу легко подключиться к сигналу из QTextEdit::verticalScrollBar(), но как найти видимый текст?

У меня это есть до сих пор, но после прочтения страниц и страниц документации кажется, что у QTextEdit нет никакого способа сообщить вам, что такое текст в видимой области.

 void MyProject::on_textEdit_scrollBar_valueChanged(int value)
 {
    QStringList visibleText = // how do I do this?
 }

person Raj    schedule 01.02.2014    source источник
comment
Используйте класс QScrollarea   -  person Tachyons    schedule 01.02.2014


Ответы (1)


Вы можете использовать QTextEdit::cursorForPosition:

QTextEdit textEdit;
//...
QTextCursor cursor = textEdit.cursorForPosition(QPoint(0, 0));
QPoint bottom_right(textEdit.viewport()->width() - 1, textEdit.viewport()->height() - 1);
int end_pos = textEdit.cursorForPosition(bottom_right).position();
cursor.setPosition(end_pos, QTextCursor::KeepAnchor);
qDebug() << cursor.selectedText();
person Pavel Strakhov    schedule 01.02.2014