Qt回归在4.7和4.8之间

时间:2012-06-02 04:48:14

标签: qt4 pyqt

这可能是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_())

1 个答案:

答案 0 :(得分:3)

您指定line-height 0.3而未提供单位。文档says this about length units

  

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

然而,它并没有准确地说明它被解释为像素的哪种情境,而不是像素。可能会在line-height的背景下对其进行解释。

line-heigthone of the more recently added features,因此与早期版本的兼容性可能不会被视为问题。

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