我正在使用带有自动换行功能的QPlainTextEdit控件,我想知道如何检测以更新行计数器,何时换行文本块(导致行数增加)。
底层 QTextDocument有一个信号来检测块计数何时发生变化,但没有检测到行数变化的相应信号。
是否可以检测 QTextDocument 的自动换行和行数增加?
我正在使用带有自动换行功能的QPlainTextEdit控件,我想知道如何检测以更新行计数器,何时换行文本块(导致行数增加)。
底层 QTextDocument有一个信号来检测块计数何时发生变化,但没有检测到行数变化的相应信号。
是否可以检测 QTextDocument 的自动换行和行数增加?
这有点晚了,但也许我的回答可以帮助别人。
我在公司有几乎相同的需求,我这样解决了:
// 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();
此致
我通过使用QAbstractTextDocument的信号documentSizeChanged解决了:
无效 QAbstractTextDocumentLayout::documentSizeChanged ( const QSizeF & newSize ) [信号]
当文档布局的大小更改为 newSize 时会发出此信号。当文档的整个布局大小发生变化时,QAbstractTextDocumentLayout 的子类应发出此信号。此信号对于显示文本文档的小部件很有用,因为它使它们能够正确更新其滚动条。
我知道我的字体大小并获得新基础文档的精确大小使我能够计算文本文档的行数(是否换行)。