1

QTableView の QStyledItemDelegate をサブクラス化する必要があります。具体的には、特定の列の表示を変更する必要があります。通常、この列のセルにはテキストが含まれています。これは私のカスタム QStyledItemDelegate クラスの一部です:

elif index.column() == 3:
    title = index.data()
    painter.drawText(option.rect, QtCore.Qt.AlignCenter, title)

しかし、このように表示しようとすると、少し問題があります。

期待される:

期待される

現実:

現実

期待どおりの画像を得るには、StyledItemDelegate のこの列で何もする必要はありません。それと同じことをする必要がありますが、関数 drawText を使用します。

何か考えはありますか?

4

1 に答える 1

1

わかりました、ここで一種の答えを見つけました: Word Wrap with HTML? QTableView とデリゲート

また、テキストを html に変換し、html の書式設定を可能にします (私もそれが必要でした) が、ワードラップを使用して単純なテキストを表示するように簡単に変換できると思います。

このスニペットは基本的に、QStyledItemDelegate を使用して、その場でコンテンツやコンテンツのフォーマットを変更したい人向けです。

options = QtGui.QStyleOptionViewItemV4(option)
self.initStyleOption(options, index)

painter.save()

doc = QtGui.QTextDocument()
text_option = QtGui.QTextOption(doc.defaultTextOption())
text_option.setWrapMode(QtGui.QTextOption.WordWrap)
doc.setDefaultTextOption(text_option)

# Modify the text here. Ex:
# options.text += "<br><br>"
doc.setHtml(options.text)
doc.setTextWidth(options.rect.width())

options.text = ""
options.widget.style().drawControl(QtGui.QStyle.CE_ItemViewItem, options, painter)

# Center the text vertically
height = int(doc.documentLayout().documentSize().height())
painter.translate(options.rect.left(), options.rect.top() + options.rect.height() / 2 - height / 2)

clip = QtCore.QRectF(0, 0, options.rect.width(), options.rect.height())
 doc.drawContents(painter, clip)

painter.restore()
于 2015-02-08T09:19:08.527 に答える