QStyledItemDelegate を作成したカスタム QWidget のように動作させようとしているので、コードをモデル/ビュー アプローチに切り替えることができます。
カスタム QWidget は複雑なボタンで、マウス オーバー時に四隅に 4 つの「サブ ボタン」が表示されます (つまり、全部で 5 つのシグナルがあります)。カスタム ドラッグ ピックスマップを使用してドラッグ アンド ドロップすることもできます。これを実現するために、mousePressEvent、mouseReleaseEvent、mouseMoveEvent、enterEvent、および leaveEvent を使用しています。これは、マウスオーバーで表示される「サブボタン」がある場合とない場合の外観です。
それ以来、メイン コードをモデル/ビュー アプローチを使用するように切り替え、このウィジェットをカスタマイズした ListView の QStyledItemDelegate として使用しようとしています。次のようなエディターとしてカスタム ウィジェットを割り当ててみました。
class ToolButtonDelegate( QStyledItemDelegate ):
def __init__( self, parent=None ):
super( ToolButtonDelegate, self).__init__( parent )
self.parent = parent
def createEditor( self, parent, option, index ):
if not index.isValid():
return False
btn = FancyButton( index.data( Qt.UserRole ), parent=parent )
return btn
クリックしたアイテムの「FancyButton」クラスを描画するので、これは有望に思えます。ただし、これをマウスオーバーイベントにする必要があります。もう少し調査した後、QAbstractItemView.entered スロットを QAbstractItemView.edit シグナルに接続してみました。
self.entered.connect( self.edit )
これは、マウス ポインターを移動した最初のアイテムに対してのみ機能し、次のエラーが発生します。
edit: editing failed
だから今、私はこれらの問題で再び立ち往生しています:
- エディターを適切に閉じる方法 (「QAbstractItemView.leave」イベントなどはありません)。
- QAbstractIremView と対話するだけでなく、マウス クリックが実際に FanyButton クラスのボタンをトリガーするようにする方法
ここで間違った方向に進んでいるような気がします。