最近,当鼠标指针进入时,我希望QListWidgetItem可以发出信号。显示一个QStackedWidget,离开时,隐藏QStackedWidget; 我定义了一个类My_ListWidget;在类中,我重写了enterEvent和leaveEvent。但这是我悬停在QListWidget而不是QListWidgetItem,它总是显示QStackedWidget的第一个。
答案 0 :(得分:2)
覆盖mouseMoveEvent
并抓取光标下的QListWidgetItem
itemAt(event.pos())
编辑:您可以使用信号entered
而不是覆盖mouseEvent,它也会传递项目的ModelIndex,然后使用leaveEvent清除堆叠的小部件,您需要激活mouseTracking才能使其工作
答案 1 :(得分:0)
对我来说,通过itemAt
获取项目时遇到了一些问题。子类化QListWidget时,可以使用setMouseTracking(True)启用鼠标跟踪,并使用itemEntered
和leaveEvent
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...