当鼠标指针hovor QListWidgetItem时,怎么做,那么QListWidgetItem会发出信号?

时间:2013-11-12 08:12:36

标签: qt

最近,当鼠标指针进入时,我希望QListWidgetItem可以发出信号。显示一个QStackedWidget,离开时,隐藏QStackedWidget; 我定义了一个类My_ListWidget;在类中,我重写了enterEvent和leaveEvent。但这是我悬停在QListWidget而不是QListWidgetItem,它总是显示QStackedWidget的第一个。

2 个答案:

答案 0 :(得分:2)

覆盖mouseMoveEvent并抓取光标下的QListWidgetItem itemAt(event.pos())

编辑:您可以使用信号entered而不是覆盖mouseEvent,它也会传递项目的ModelIndex,然后使用leaveEvent清除堆叠的小部件,您需要激活mouseTracking才能使其工作

答案 1 :(得分: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...