【问题标题】:Qt - how to detect line count increase after word wrapping?Qt - 如何检测自动换行后的行数增加?
【发布时间】:2014-09-17 17:41:36
【问题描述】:

我正在使用QPlainTextEdit 控件并启用自动换行功能,我想知道如何检测以更新行计数器,何时换行文本块(导致行数变为递增)。

底层QTextDocumenthas a signal to detect when the block count changes,但不是对应的行数变化。

是否可以检测 QTextDocument 的自动换行和行数增加?

【问题讨论】:

  • 检查'\r\n'或字符数,如果我没记错的话,通常每80个字符被认为是一行。
  • @Hossein 检查行尾字符串可能会为您提供段落计数,但行计数(在启用自动换行的小部件的上下文中)将取决于小部件,因此即使它所代表的文本字符串没有改变,它也会有所不同。
  • 我一直在考虑检测块更改并计算字符(相对于控件宽度)以查看块是否适合一行或多行,但这确实感觉很重-重量。

标签: c++ qt qtextdocument qtwidgets


【解决方案1】:

有点晚了,但也许我的回答可以帮助别人。
我的公司也有几乎相同的需求,我是这样解决的:

// 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();

最好的问候

【讨论】:

    【解决方案2】:

    我用QAbstractTextDocument的信号documentSizeChanged解决了:

    void QAbstractTextDocumentLayout::documentSizeChanged ( const QSizeF & newSize ) [信号]

    当 文档布局更改为 newSize。的子类 QAbstractTextDocumentLayout 应该在 文档的整个布局大小发生变化。这个信号是有用的 显示文本文档的小部件,因为它使它们能够更新 他们的滚动条正确。

    我知道我的字体大小并获得新的基础文档的精确大小让我可以计算我的文本文档的行数(是否换行)。

    【讨论】:

      猜你喜欢
      • 2019-04-16
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      相关资源
      最近更新 更多