QTreeWidgetItemsがアイテムの上にドラッグされたときに描画される方法をオーバーライドしようとしています。私はペイントしたいQTreeWidgetItemsのQt.UserRoleデータを1に設定するためにドラッグイベントをオーバーライドしました。 Item Delegateでは、私はUserRoleを読み、それに応じて描画します。カスタムペイントにQt Delegatesを使用するには?
私のカスタムペインティングが期待通りに表示されています(太字の線)。しかし、他のすべてのペイント(テキストなど)を抑制することなく、ドラッグするための標準ペインタによる描画(つまり小さな矩形)を抑制する方法を理解できませんでした。
すべてのアイデアをいただければ幸いです。
例。
def dragMoveEvent(self, event):
pos = event.pos()
item = self.myTreeWidget.itemAt(pos)
# If hovered over an item during drag, set UserRole = 1
if item:
index = self.myTreeWidget.indexFromItem(item)
self.myTreeWidget.model().setData(index, 1, Qt.UserRole)
# reset UserRole to 0 for all other indices
for i in range(self.myTreeWidget.model().rowCount()):
_index = self.myTreeWidget.model().index(i, 0)
if not item or index != _index:
self.myTreeWidget.model().setData(_index, 0, Qt.UserRole)
class MyDelegate(QStyledItemDelegate):
def paint(self, painter, option, index):
QStyledItemDelegate.paint(self, painter, option, index)
painter.save()
data = index.model().data(index, Qt.UserRole).toInt()
# if UserRole = 1 draw custom line
if data[1] and data[0] == 1:
line = QLine(option.rect.topLeft(), option.rect.topRight())
painter.drawLine(line)
painter.restore()
について、助け
希望は、おそらく標準のレンダリングの一部を上書きする方法を把握しようとしているよりも少ない労力がかかります。 – Apalala