如何在当前页面末尾的QTextEdit中将几个不可分离的文本块放在一起(在下一页上全部抛出)?

时间:2009-03-11 18:39:38

标签: c++ qt

我有一个QTextEdit文档,每个版本的大小都不同。在文档的中间,我有几个文本块,在用户眼中是不可分割的,我必须保护我的块不分裂在两个页面上,以防文档达到相同的大小。你有任何解决方案吗?

2 个答案:

答案 0 :(得分:3)

我是Qt的忠实粉丝,但我还没有机会使用QTextEdit。我想提供帮助,所以我查看了文档。

如果你使用的是最新版本的Qt,你应该会发现QTextEdit有一个相关的QTextDocument,看起来你所寻求的功能可能就在那里。 QTextDocument是帧和块的层次结构。如上所述,块等同于段落。

文档似乎表明您可以指定将块包装在框架中。然后,您应该能够使用QTextFrame :: setFrameFormat为框架设置格式。此格式允许您使用某些标志指定分页符策略。指定的标志是PageBreak_Auto,PageBreak_AlwaysBefore和PageBreak_AlwaysAfter。

在我看来,如果你为框架设置了PageBreak_AlwaysBefore和PageBreak_AlwaysAfter标志,那么你的模块应该保持在一起。

我意识到这是一个相当复杂的系列。我希望它有所帮助,并且非常希望听到它是否有效。

答案 1 :(得分:0)

你最接近的事情是Unicode段落分隔符(U + 2029)。如果您使用段落分隔符包围文本正文,则渲染器不应在页面中单独保留段落的第一行或最后一行。在MS-Word中可以很容易地观察到这种行为。但是,如果块的文本是四行或更多,那么您没有受让人,所有四行将在同一页面中。他们可以在页面之间分成2-2。

您所谈论的概念在字和行之间以较小的比例广泛使用。如果在单词之间放置一个NBSP(无间隔空格,U + 00A0)而不是正常空格,则渲染器知道该空间不应该断开该线。
您实际需要的是“无分页换行”。不幸的是,Unicode没有这样的特性。

您可以尝试使用NBSP而不是空格来编写整个文本块。最终你的唯一NBSP文本将变得比一条线大,它将不得不在某个地方打破。这是Unicode的某种结束情况,我不确定它是否真正定义过。也许有可能生成的换行符不会在页面之间中断。这甚至是最终案例的进一步结束。了解在这种情况下发生的事情的唯一方法是尝试。