Qt — как определить увеличение количества строк после переноса слов?

Я использую QPlainTextEdit контроль с активным переносом слов, и мне интересно, как я могу определить, чтобы обновить счетчик строк, когда блок текста переносится (вызывая увеличение количества строк).

Базовый QTextDocument имеет сигнал для определения изменения количества блоков, но не соответствующий для изменения количества строк.

Можно ли обнаружить перенос слов и увеличение количества строк для QTextDocument?

1

Решение

Я решил с помощью QAbstractTextDocumentсигнал documentSizeChanged:

void QAbstractTextDocumentLayout :: documentSizeChanged (const QSizeF &
newSize) [сигнал]

Этот сигнал испускается, когда размер
макет документа изменяется на newSize. Подклассы
QAbstractTextDocumentLayout должен испускать этот сигнал, когда
Изменяется размер макета всего документа. Этот сигнал полезен для
виджеты, которые отображают текстовые документы, поскольку это позволяет им обновлять
их полосы прокрутки правильно.

Я знаю размер моего шрифта, и получение точного размера нового базового документа позволило мне подсчитать строки (обернутые или нет) моего текстового документа.

0

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

Уже немного поздно, но, возможно, мой ответ кому-нибудь поможет.
У меня была почти такая же потребность в моей компании, и я решил ее так:

// This example show how to get the visual number of lines
QPlainTextEdit *pte = new QPlainTextEdit();
pte->setAttribute(Qt::WA_DontShowOnScreen);
pte->show();
pte->setFixedWidth(50);
pte->setPlainText("Hello world!");
/* The next line return the number of necessary line
to display the text "Hello World!" with width of 50px */
int lineCount = pte->document()->documentLayout()->documentSize().height();

С наилучшими пожеланиями

0

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