3

QTreeWidget のワード ラッピングの問題を回避するために、QTreeWidget に QLabel ウィジェットを追加しました。( QTreeWidgetItem をワードラップする方法を参照してください)。QLabel ウィジェットは、テキストが折り返されると何らかの理由で消えるテキストの周りにスペースがあるように見えます。また、ラベル テキストが空白の場合も表示されません。

QLabel で設定しようとしsetContentsMargin(0,0,0,0)ましたが、うまくいきませんでした。私も試してみsetStyleSheet("border: 0px; margin: 0px; padding: 0px;")ましたが、これも役に立ちませんでした。

スクリーンショット: ツリーのスクリーンショット

QT が単語の周りに間隔バッファーを置くかどうかは、説明の長さに依存することがわかります。ワードラップが有効になっている場合にのみ発生します。さらにいじってみると、説明文字列のスペースに依存していることを示しているようです。文字列にスペースを入れないことで、単語の周りに余分なスペースができなくなります。おそらく、QLabel がワード ラップ プロパティを使用して行っていることと関係があります。

# This code is Ruby because I'm using the qtbindings gem
tree = Qt::TreeWidget.new
tree.setColumnCount(2)
tree.setHeaderLabels(["Name", "Description"])

top_node = Qt::TreeWidgetItem.new(["top"])
top_node.setCheckState(0, Qt::Unchecked)
tree.addTopLevelItem(top_node)
desc_label = Qt::Label.new("description")
desc_label.setWordWrap(true) # Remove and it works
tree.setItemWidget(top_node, 1, desc_label)

node = Qt::TreeWidgetItem.new(["test1"])
node.setCheckState(0, Qt::Unchecked)
top_node.addChild(node)
desc_label = Qt::Label.new("description1 is long and very interesting")
desc_label.setWordWrap(true) # Remove and it works
tree.setItemWidget(node, 1, desc_label)
4

3 に答える 3

1

表示されるのは、QLabel の描画/配置のためのレイアウト ロジックの効果です (これらのルーチンはhttps://qt.gitorious.org/qt/qt/source/f7b3072924fb57b3979ff4d536eb213270be1047:src/gui/widgets/qlabel.cpp#sizeForWidthにあります) 、 sizeForWidth() メソッドを参照してください)。

あなたができることは次のとおりです。

setTextFormat() を設定し、すべてのカスタム項目に PlainText または RichText を明示的に使用することで、動作を少し変更できます。しかし、それは役に立たないかもしれません。

私の推奨は、使用されている QItemDelegate または QStyledItemDelegate をサブクラス化し、 sizeHint( const QStyleOptionViewItem & option, const QModelIndex & index ) を再実装して、カスタマイズしたアイテムの目的のサイズ、高さを返すことです。次に、 setItemDelegate() を使用して表示します。

于 2014-01-25T10:29:34.093 に答える