0

最近、マウスポインターが入ったときにQListWidgetItemがシグナルを発することができるようにしたいと思っています。QStackedWidget を表示し、離れると QStackedWidget を非表示にします。クラス My_ListWidget を定義しました。クラスでは、enterEvent と leaveEvent をオーバーライドします。しかし、これはQListWidgetItemではなくQListWidgetにカーソルを合わせると、常に最初のQStackedWidgetが表示されます。

4

2 に答える 2

3

でカーソルの下をオーバーライドmouseMoveEventしてグラブしますQListWidgetItemitemAt(event.pos())

編集: mouseEvent をオーバーライドする代わりにentered、アイテム end の ModelIndex も渡すシグナルを使用してから、leaveEvent を使用して積み重ねられたウィジェットをクリアできます。これを機能させるには、mouseTracking を有効にする必要があります。

于 2013-11-12T08:28:06.393 に答える
0

私にとっては、経由でアイテムを取得する際にいくつかの問題がありましたitemAt。QListWidget をサブクラス化する場合、setMouseTracking(True) でマウス トラッキングを有効にしitemEnteredleaveEvent

class My_ListWidgetClass(QListWidget):
    def __init__(self):
        QListWidget.__init__(self)

        self.setMouseTracking(True)

class Main(...):
    def __init__(self):

        self.centralWidget.connect( self.My_ListWidgetInstance,
                                    SIGNAL('itemEntered(QListWidgetItem *)'),
                                    self.whenItemEntered_doThis)

        self.centralWidget.connect( self.My_ListWidgetInstance,
                                    SIGNAL('leaveEvent(QEvent *)'),
                                    self.whenItemLeft_doThis)

    def whenItemEntered_doThis(self, QLWItem):
        # you can apply behavior here according 
        # to the QListWidgetItem given as argument 
        # e. g. get itemtext (itemtext = str(QLWItem.text())

    def whenItemLeft_doThis(self, Event):
        # executed when an item was left
        # unfortunatelly I can't explain, what you
        # can do with the event. I didn't need it...
于 2013-11-20T20:15:00.367 に答える