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 は現在、パラメーター 'text' として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 に答える