Events 如何在PyQt中从Qt小部件派生的小部件中捕获所有鼠标事件?

Events 如何在PyQt中从Qt小部件派生的小部件中捕获所有鼠标事件?,events,pyqt,Events,Pyqt,特别是,我继承了QCalendarWidget,我想覆盖MousePresseEvent方法来过滤允许选择的日期(不相交集,而不是简单的范围)。但是当我重写该方法时,它不会捕获任何将要发送到日历中的子窗口小部件的事件。我怎么能做到这一点呢?我很惊讶重写mousePressEvent对QCalendarWidget不起作用。它适用于大多数其他小部件。在查看QCalendarWidget的文档后,我注意到有一个单击的信号。如果你把它连接起来,它就会工作 import sys from PyQt4

特别是,我继承了QCalendarWidget,我想覆盖MousePresseEvent方法来过滤允许选择的日期(不相交集,而不是简单的范围)。但是当我重写该方法时,它不会捕获任何将要发送到日历中的子窗口小部件的事件。我怎么能做到这一点呢?

我很惊讶重写mousePressEvent对QCalendarWidget不起作用。它适用于大多数其他小部件。在查看QCalendarWidget的文档后,我注意到有一个单击的信号。如果你把它连接起来,它就会工作

import sys

from PyQt4 import QtGui, QtCore

class MyCalendar(QtGui.QCalendarWidget):
    def __init__(self):
        QtGui.QCalendarWidget.__init__(self)
        self.connect(self, QtCore.SIGNAL("clicked(QDate)"), self.on_click)
        self.prev_date = self.selectedDate()

    def on_click(self, date):
        if self.should_ignore(date):
            self.setSelectedDate(self.prev_date)
            return
        self.prev_date = date

    def should_ignore(self, date):
        """ Do whatever here """
        return date.day() > 15

app = QtGui.QApplication(sys.argv)
cal = MyCalendar()
cal.show()
app.exec_()
我以前从未签过QCalendarWidget。可爱的小东西