2010-03-03 68 views
10

我必須使用項目(或項目的子項)來填充QTreeWidget,這些項目可能碰巧太長而無法放在一行中,所以我正在尋找一種將它們包裝起來的方法。如何自動換行QTreeWidgetItem

我想

myQTreeWidget.setWordWrap(True) 

(通過QtDesigner4完成)會做的工作,但是這似乎並不如此。

我不知道它是否相關,但樹被包圍在分離器框架中,所以包裝應該是某種動態的以允許分離器的大小調整。

任何想法?我使用PyQt4,但任何語言/綁定提示將不勝感激。

回答

17

我成功地找到了一個解決方法:我在WidgetItem中封裝QLabel,設置QLabel具有自動換行功能。

item = QTreeWidgetItem() 
label = QLabel('long text here') 
label.setWordWrap(True) 

MyTree.addTopLevelItem(item) 
MyTree.setItemWidget(item, 0, label) 

行爲正是所期望的行爲!

+0

很酷的解決方案,謝謝分享。另外,您可能需要在答案中將「clinicalBox」更改爲「標籤」。 –

+1

呵呵,對不起!這就是天真的複製和粘貼:) – japs

+0

我遇到了QLabel上的間距問題:http://stackoverflow.com/questions/21007272/remove-space-from-qlabel-in-a-qtreewidget – Jason

0

setWordWrap只是引起圍繞字邊界的包裝...它不會強制任何東西到一個新的行。

你在找什麼是不可能與默認QTreeWidget。我建議以替代方式顯示太長的文本,例如鼠標懸停文本或單獨的標籤。 TreeViews不應該包含每個項目多於一行的文本。

+1

但是如果我 項= QTreeWidgetItem([「一些文字\ n和一些更多」]) 它顯示恰好正如人們所期望:上兩行中的項目。 – japs

+1

儘管如此,真正的(動態)單詞換行是不可能的。你可以做的唯一一件事是模擬自動換行,編寫自己的自動換行功能,根據widget的寬度向物品stings添加換行符,然後創建一個信號在widget的大小發生改變時調用該函數。 –

+1

我試圖在一個項目中包裝一個QLabel或一個QText-東西,這樣我就可以繼承文本框的文字包裝功能,無論它發生什麼樣的事情都可以做正確的工作。 – japs