qt模型/视图:如果I';您是否重新实现了事件处理程序?
我有一个关于qt设计的一般性问题 比如说,我创建了一个自定义类,实现了qt模型/视图:如果I';您是否重新实现了事件处理程序?,qt,model-view-controller,gtk,pyqt,Qt,Model View Controller,Gtk,Pyqt,我有一个关于qt设计的一般性问题 比如说,我创建了一个自定义类,实现了QAbstractTableModel和QTableView类。我在视图中重新实现了事件处理程序,如鼠标按下,鼠标释放等 Qt的视图仍然能够执行一些默认功能:它仍然通过改变选择来响应鼠标点击和单元格移动,因此它以某种方式触发selectionModel“内置”信号,尽管我没有要求它这样做。如果我拖动单元格边框等,它仍然会调整列的大小。触发这些“内置默认插槽”的机制是什么?如何禁用其中的某些部分?例如,如果我想禁用selecti
QAbstractTableModel
和QTableView
类。我在视图
中重新实现了事件处理程序,如鼠标按下
,鼠标释放
等
Qt的视图
仍然能够执行一些默认功能:它仍然通过改变选择来响应鼠标点击和单元格移动,因此它以某种方式触发selectionModel
“内置”信号,尽管我没有要求它这样做。如果我拖动单元格边框等,它仍然会调整列的大小。触发这些“内置默认插槽”的机制是什么?如何禁用其中的某些部分?例如,如果我想禁用selectionModel
的默认行为或默认调整大小
为了便于比较,在gtk+
中有一个默认每类信号处理程序的概念,这是一个函数,默认情况下连接到其信号,并在自定义每类或每对象信号处理程序之前或之后调用,具体取决于您设置的参数。如果您想完全控制调整大小或选择等行为,可以从自定义插槽中禁用它
Qt在这里是不透明的,并且仅通过其接口功能提供定制吗?我的问题特别与
pyqt
有关。如果我太含糊,请要求澄清。您提到的事件处理程序用于侦听事件,而不是过滤事件。您不能覆盖其中的任何事件,因为它们没有返回值:无法通知后续事件处理您不希望它运行
要过滤事件,必须重新实现event
方法,并对不希望过滤的事件调用基类的实现
在Qt中,事件处理是针对每个对象进行的,您可以在任何其他对象上安装外部对象作为事件过滤器。对象在其
event
方法中接收事件。QObject
类实现此方法并调用timerEvent
方法。类重新实现此方法并调用特定于小部件的xxxEvent
方法。等等所有这些类仍然在内部处理一些事件。这些是您提到的每类处理程序。Kuba Ober,感谢您的回答。我已经阅读了一些文档,并按照您的建议在我的QTableView
中实现了一个空的event
函数:def event(self,event):return False
(或return True
,它不会影响结果)。如您所见,我没有调用任何事件处理程序的基类实现。尽管如此,QTableView的所有默认功能仍然存在:它对用鼠标选择单元格、调整单元格大小、重画等做出响应。为什么?我认为,它不应该:)