Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
qt模型/视图:如果I';您是否重新实现了事件处理程序?_Qt_Model View Controller_Gtk_Pyqt - Fatal编程技术网

qt模型/视图:如果I';您是否重新实现了事件处理程序?

qt模型/视图:如果I';您是否重新实现了事件处理程序?,qt,model-view-controller,gtk,pyqt,Qt,Model View Controller,Gtk,Pyqt,我有一个关于qt设计的一般性问题 比如说,我创建了一个自定义类,实现了QAbstractTableModel和QTableView类。我在视图中重新实现了事件处理程序,如鼠标按下,鼠标释放等 Qt的视图仍然能够执行一些默认功能:它仍然通过改变选择来响应鼠标点击和单元格移动,因此它以某种方式触发selectionModel“内置”信号,尽管我没有要求它这样做。如果我拖动单元格边框等,它仍然会调整列的大小。触发这些“内置默认插槽”的机制是什么?如何禁用其中的某些部分?例如,如果我想禁用selecti

我有一个关于qt设计的一般性问题

比如说,我创建了一个自定义类,实现了
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的所有默认功能仍然存在:它对用鼠标选择单元格、调整单元格大小、重画等做出响应。为什么?我认为,它不应该:)