0

这可能是 Qt4.7 和 Qt4.8 之间的回归。每个段落都应该在单独的行上,但是在 4.8 上它被破坏了。你知道一些解决方法吗?

#!/usr/bin/env python3

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *


class CustomLabel(QLabel):
    def __init__(self, text):
        super(CustomLabel, self).__init__(text)
        self._text = text

    def paintEvent(self, event):
        brect = QRect()  #Qt.rect()
        painter = QPainter(self)
        painter.fillRect(brect, Qt.transparent)
        doc = QTextDocument(self)
        stylesheet = "*{color: " + painter.pen().color().name() + "; line-height:0.3; margin:0; padding:0;}"
        doc.setDefaultStyleSheet(stylesheet)
        doc.setUndoRedoEnabled(False)
        doc.setHtml(self._text)
        doc.setUseDesignMetrics(True)
        doc.drawContents(painter, QRectF())
        print(doc.toHtml())
        print(doc.toPlainText())

app = QApplication(sys.argv)
label = CustomLabel("<p><font style=\"font-size: 9px;\" color=\"#fffe51\">Text 2</font></p><p><font size=\"9px\" color=\"#aaaaaa\">Text 3</font></p>")
label.show()
label.resize(100, 100)
sys.exit(app.exec_())
4

1 回答 1

3

您指定 a而不给出单位line-height0.3文档说明了有关长度单位的内容:

一个数字,后跟一个测量单位。CSS 标准建议用户代理必须忽略具有非法值的声明。在 Qt 中,必须指定测量单位。为了与早期版本的 Qt 兼容,在大多数情况下,没有测量单位的数字被视为像素。

但是,它并没有确切说明在哪些上下文中它被解释为像素,而在哪些上下文中它不是。可能在line-height.

line-heigth最近添加的功能之一,因此与早期版本的兼容性在这里可能不被视为问题。

(实际上,我刚刚看到line-height样式表参考中甚至没有正式提及。)

于 2012-06-02T10:54:07.053 回答