2013-10-19 76 views
1

我在畫布上需要顯示一些文字的一些小的圖形項。當存在換行符時,垂直行間距不必要的大,這使得文本被繪製在圖形項目之外。我一直在尋找一種方法來設置QGraphicsTextItem的行間距(或者可能是高度),但沒有運氣。qt set line spacing.height in 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。

請幫忙,這真的是一個眼神。

乾杯,拉爾斯。

+0

有人嗎?我應該多解釋一下嗎?這是不可能的嗎? – Lars

回答

2

當項目的html代碼中的<br>引起換行時,不會再現此行爲。自動換行使用"test1 test2"內容和setTextWidth也工作正常。但是當換行符由<p></p>標籤引起時,會出現不必要的大行高。我認爲這是你的情況。它可以很容易地修復:

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

請注意,您需要在設置項目的內容之前調用它。該命令不會影響當前內容。

+0

我不確定你是否在談論同樣的事情,只要我能找到QGraphicsItem沒有方法「文檔」。我使用autobreak和setTextWidth,'邊距'設置文本週圍的空間,而我想減少線條之間的垂直距離。 – Lars

+0

'document'是'QGraphicsScene :: addText'返回的'QGraphicsTextItem'對象的一種方法。使用'setTextWidth'不會爲我重現問題。你可以請張貼你當前實施的一些代碼嗎? –

+0

補充說,我對QGraphicsItem/QGraphicsTextItem的誤解很不好 – Lars