qt在QGraphicsTextItem中设置行间距。高度

时间:2013-10-19 10:03:15

标签: qt qt4.8

我在画布上有一些需要显示一些文字的小图形项目。当存在换行符时,垂直行间距不必要地大,这使得文本被绘制在图形项之外。我一直在寻找一种方法来设置QGraphicsTextItem上的行间距(或者可能是高度),但没有运气。

我试过了;

setHtml("<div line-height=100%>some text</div>") 

需要设置行间快速的代码是:

class GraphicText(QtGui.QGraphicsTextItem):

def __init__(self, text='', font=None, editable=False, text_width = None, **kw):        
    super(GraphicText, self).__init__(**kw) 
    if editable:
        self.setTextInteractionFlags(QtCore.Qt.TextEditorInteraction)
    else:
        self.setTextInteractionFlags(QtCore.Qt.NoTextInteraction)
    if font:
        self.setFont(font)
    self.setText(text, text_width)

def setText(self, text = '', text_width = None):
    cw = self.textWidth()
    try:
        width = text_width or (cw if cw>0 else False) or self.parentItem().boundingRect().width()-4
    except AttributeError:
        width = 100
    self.setTextWidth(width)
    self.setHtml(text)
    rect = self.boundingRect()
    self.setPos(-rect.width() / 2, -rect.height() / 2)  # center

这是Python / PySide,但其他API与C ++几乎相同。 HTML当前作为参数“text”传递到 init 方法。 QGraphicsTextItem的父级是QGraphicsItem。

请帮助,这真的是一个眼睛。

干杯,拉尔斯。

1 个答案:

答案 0 :(得分:2)

当换行符由项目的html代码中的<br>引起时,不会再现此行为。使用"test1 test2"内容和setTextWidth的自动换行功能也正常。但是当换行由<p></p>标签引起时,会出现不必要的大线高。我认为这是你的情况。它很容易修复:

item->document()->setDefaultStyleSheet("p { margin: 0; }");

请注意,您需要在设置项目内容之前调用它。此命令不会影响当前内容。