3

介绍:

我正在尝试在 QT 中绘制分页论坛帖子。我最初的一些努力导致了QFrame嵌套标签(此处显示了屏幕截图)。从那时起,我不得不将引号与常规文本混合在一起,并且我需要动态标签以我当前的方法来做到这一点(即,一个帖子实例可能有 5 个引号和 7 个常规文本 = 13QLabel秒,并且每次我绘制一个新的帖子实例我重新创建了所有的QLabels)。创建和销毁 QLabels 非常昂贵,而且我看到了视觉滞后。

所以我决定尝试一次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()

结果是:

在此处输入图像描述

注意:宽度不被尊重,也没有自动换行。

哦,如果您想炫耀,请随意设置帖子样式并显示引用区域:D

编辑:

我尝试更改 post body 小部件(而不是更改整个小部件),它是一个QVBoxLayoutwith QLabels。<p>我用and将其更改为单个 QLabel <blockquote>。而且该组合可以正确换行。尽管工作正常,但布局+标签方法看起来更好。

所以也许我应该修改我的设计并维护一个 Quote Widgets + 常规文本标签列表,以便通过回收来摆脱视觉滞后。

尽管如此,如果有人可以从上面的代码中创建和设置合理的论坛帖子的 html 表示形式,它可能是一个更强大的解决方案。

编辑2:

虽然在我的情况下可能会获得基于 HTML 的样式来处理单个 QLabel,但在尝试让它工作之后,我得出的结论是,多 QLabel 方法以更可控的方式布置事情,而不需要太多努力我这边。我会坚持这一点。/

4

1 回答 1

4

在这种情况下,自动换行问题可能是由使用 引起的QLabel,而不是 html 引擎的任何限制。

默认情况下,自动换行是关闭的,因此请尝试:

l = QLabel(html)
l.setWordWrap(True)
l.show()
于 2012-08-21T18:26:11.783 回答