在HTML <td>元素中对Qt Qlabel文本进行自动换行处理

4

介绍:

我正在尝试在QT中绘制分页论坛帖子。我最初的一些努力结果是一个带有嵌套标签的QFrame(屏幕截图显示在这里)。从那时起,我必须将引号与常规文本混合使用,并且需要动态标签来在当前方法中执行(即,一个帖子实例可能有5个引用和7个常规文本= 13个QLabel,每次我绘制新的帖子实例时,我重新创建所有的QLabel)。创建和销毁QLabel的成本非常高,我看到了视觉滞后。

因此,我决定尝试在单个QLabel中使用HTML完成。我选择了在这里概述的方法,使用模拟的垂直线条分隔帖子元数据和帖子正文。

垂直线条很好用,但是我无法使帖子正文换行。我怀疑QT的html引擎会很棘手,而我不是HTML大师。

问题:

如何使以下代码文字换行到固定宽度上(即,垂直增长)。

from PyQt4.QtGui import QApplication, QLabel
import sys


html = '''
<table cellspacing="5" border="0" cellpadding="0">
<tr valign="top" align="left">
<td style="padding-right: 10px;" width="100">
  <p>#%s<br>
  <b>User:</b> %s<br>
  <b>posted at:</b> %s </p>
</td>
<td width="1" bgcolor="#00FFFF"><BR></td>
<td style="padding-left: 10px;" width="100" valign="top" align="left">
  <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum. </p>
</td>
</tr>
</table>
''' % (1, "hassan", "sunday") 

app = QApplication(sys.argv)
l = QLabel(html)
l.show()
app.exec_()
sys.exit()

这导致结果如下: enter image description here 注意:宽度和换行都没有被正确处理。
哦,如果你想炫耀一下,可以随意为这篇文章添加样式,并展示引用区域 :D
编辑:我尝试修改帖子主体小部件(而不是整个小部件),它是一个带有QLabel的QVBoxLayout。我将其改为单个QLabel,其中包含

。这种组合确实可以正确换行。虽然即使使用这种方法,布局+标签方式看起来更好看。因此,也许我应该修改我的设计,维护一个引用小部件列表+常规文本标签,以消除通过回收视觉滞后的问题。
但是,如果有人能够创建并样式化从上面的代码生成的论坛帖子的合理HTML表示,则可能是更可靠的解决方案。
编辑2:虽然在我的情况下基于HTML的样式表现可能能够在单个QLabel上工作,但在尝试使其正常工作之后,我得出结论,使用多个QLabel的方法可以更加轻松地控制布局。我会坚持这种方法。

为什么不能有单独的标签:一个用于用户数据,另一个用于整个帖子正文? - Lol4t0
你尝试过将HTML数据放入“段落”中吗? - Zeb
1个回答

5
在这种情况下,换行问题可能是由于使用 QLabel 导致的,而不是 html 引擎的限制。
默认情况下,自动换行 是关闭的,因此请尝试:
l = QLabel(html)
l.setWordWrap(True)
l.show()

好的,这种情况下我并没有错过它。我原本希望HTML能够正常工作但被裁剪。 - Hassan Syed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接