1

我在画布上有一些小图形项,需要显示一些文本。当出现换行时,垂直行间距过大,导致文本被绘制在图形项之外。我一直在寻找一种在 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 当前作为参数“文本”传递给init方法。QGraphicsTextItem 的父对象是 QGraphicsItem。

请帮忙,这真的很碍眼。

干杯,拉斯。

4

1 回答 1

2

当换行符由<br>项目的 html 代码引起时,不会重现此行为。"test1 test2"使用内容自动换行并且setTextWidth工作正常。但是当换行是由<p></p>标签引起的时,就会出现不必要的大行高。我认为这是你的情况。它可以很容易地修复:

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

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

于 2013-10-30T20:11:06.747 回答