【发布时间】:2012-08-21 17:11:03
【问题描述】:
简介:
我正在尝试在 QT 中绘制分页论坛帖子。我最初的一些努力导致了一个带有嵌套标签的QFrame(屏幕截图显示为here)。从那时起,我不得不将引号与常规文本混合在一起,并且在我目前的方法中我需要动态标签来做到这一点(即,一个帖子实例可能有 5 个引号和 7 个常规文本 = 13 QLabels,每次我画一个新的帖子实例我重新创建了所有QLabels)。创建和销毁 QLabel 非常昂贵,而且我看到了视觉滞后。
所以我决定尝试使用HTML 在单个QLabel 中完成此操作。我选择了here 概述的方法,使用模拟的垂直线将帖子元数据和帖子正文分开。
垂直线工作正常,但我无法让帖子正文自动换行。我怀疑 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
编辑:
我尝试更改帖子正文小部件(而不是更改整个小部件),它是 QVBoxLayout 和 QLabels。我将其更改为带有<p> 和<blockquote> 的单个QLabel。而且该组合可以正确换行。尽管工作正常,但布局+标签方法看起来更好。
所以也许我应该修改我的设计并维护一个引用小部件列表 + 常规文本标签,以便通过回收消除视觉滞后。
如果有人可以从上面的代码创建和设置合理的论坛帖子的 html 表示形式,那它可能是一个更强大的解决方案。
编辑 2:
虽然在我的案例中可能会使用基于 HTML 的样式来处理单个 QLabel,但在尝试让它工作后,我得出的结论是,多 QLabel 方法以更可控的方式布局,没有我付出了很多努力。我会坚持这一点。 /
【问题讨论】:
-
为什么不能有单独的标签:一个用于用户数据,另一个用于整个帖子正文?
-
你试过把html数据放到
Paragraph吗?
标签: python html pyqt4 word-wrap qlabel