扩展QTextDocument中块的定义

时间:2014-06-01 14:38:47

标签: c++ qt block qtextdocument

据我所知(official source),Qt将QTextDocument中的定义为一串字符,后跟 \ n 或类似字符。因此...

QTextDocument* doc = my_qtextedit.document();
QTextCursor cur = QTextCursor(doc);

cur.insertText("aaa\nbbb");

qDebug() << "nbr of blocks" << doc->blockCount();

...打印“nbr of blocks = 2”

但我需要

  • (1)将我的文本分成几个部分,任意划分。通过 例如,我需要将句子“我二十”分成两部分 四个街区:“我”,“'”,“m”和“二十”。
  • (2)轻松访问和修改这些部分(并在QTextEdit对象中显示)。

当前的机制很有趣,这要归功于find(),begin(),... functions / iterators,但我看不出如何专门化它以满足我的要求。

有没有办法实现这个目标?

更新alas, it seems difficult

更新QTextFragment仅允许修改文字格式。

1 个答案:

答案 0 :(得分:1)

我也遭受了这个问题的困扰。

我有两个主意(但都不确定)

我认为可以通过重新实现QAbstractTextDocumentLayout来实现 覆盖boudingblock方法时,请在该方法中写入QTextLayout()。 您可以在块中重新定义QTextLayout。

但是它非常缺乏信息。 我尝试自定义我的QTextDocument,但没有成功。

如果您只想将图块一分为四,  您可以使用QTextLayout.formatRange()

设置起始位置,长度,格式。 您可以设置从起始位置开始的长度的特殊格式。

QTextLayout()本身具有block()。 您设置了AddAdditionalFormat()。 我想你可以做到的。

QTextBlock基本上等于一个段落。 您可以通过按Enter键或insertBlock()来创建新块。 如果不这样做,那么您的句子就会变成一个段落。

我不知道使用方法来拆分块。 我尝试过setBlockCount(),但没有成功。

我想有一天我会解决这个问题的,但是...