在HTML<td>elemen中换行Qt-Qlabel文本

2024-03-28 18:46:24 发布

您现在位置:Python中文网/ 问答频道 /正文

简介:

我试图在QT中绘制分页的论坛帖子。我最初的一些努力导致了一个带有嵌套标签的QFrame(屏幕截图显示为here)。从那时起,我不得不将引号与常规文本混合使用,我需要动态标签来实现这一点(即,一个post实例可能有5个引号和7个正则文本=13QLabel,每次我绘制一个新的post实例时,我都会重新创建所有的QLabel)。创建和销毁qlabel非常昂贵,而且我看到了一个视觉延迟。在

所以我决定用HTML在一个QLabel中完成它。我选择了概述的方法here,使用模拟的垂直线将post元数据和post正文分开。在

垂直线工作得很好,但是我不能让文章正文换行。我怀疑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

编辑:

我尝试改变post body小部件(而不是整个小部件中的alterin),它是一个带有QLabels的QVBoxLayout。我用<p><blockquote>将其改为一个QLabel。这个组合可以正确地换行。尽管这样可以工作,但是layout+label方法看起来更好。在

所以也许我应该修改我的设计并维护一个引用小部件+常规文本标签的列表,以便通过重新命名来消除视觉滞后。在

不过,如果有人可以从上面的代码中创建论坛帖子的合理的html表示,这可能是一个更健壮的解决方案。在

编辑2:

虽然在我的例子中,让基于HTML的样式设计在一个QLabel上工作是可能的,但是在尝试使它工作之后,我得出了一个结论,即多QLabel方法以一种更可控的方式来布局,而我不需要太多的努力。我会坚持这个。 /在


Tags: 方法in文本htmlsys标签widthpost
1条回答
网友
1楼 · 发布于 2024-03-28 18:46:24

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

默认情况下,word-wrapping处于关闭状态,请尝试:

l = QLabel(html)
l.setWordWrap(True)
l.show()

相关问题 更多 >