标签:函数 需要 str 事件机制 调用 int 接收 功能 有一个
Qt中处理事件的五种方法:
方法一:重新实现部件的paintEvent()、mousePressEvent()等事件处理函数。
方法二:重新实现notify函数。但它一次只能处理一个事件。这种方法需要继承QApplication类。
方法三:向QApplication对象上安装事件过滤器。每个程序只有一个QApplication对象,功能与notify类似,但可同时处理多个事件。需要使用全局的事件过滤器。
方法四:重新实现event()函数。其可以在事件到达默认的事件处理函数之前获得该事件。
方案五:在对象上安装事件过滤器。使用事件过滤器可以在界面类中同时处理不同子部件的不同事件。
最常见的是方法一和方法五。
每个程序main()函数的最后都会调用QApplication类的exec()函数,它会使Qt应用程序进入事件循环,然后应用程序在运行时会接收发生的各种事件。一旦有事件发生,Qt会构建相应的QEvent子类的对象来表示它,然后将它传递给相对应的Qobject对象或者其子对象。
具体的例子可以参考霍亚飞的Qt快速入门第三版6-2源码。
结论是,事件的传递顺序是这样的:先是事件过滤器,然后是焦点部件的event()函数,最后是焦点部件的事件处理函数;如果焦点部件忽略了该事件,就执行父部件的事件处理函数。注意,event()函数和事件处理函数是在焦点部件内部定义的,而事件过滤器却是在焦点部件的父部件中定义的。
标签:函数 需要 str 事件机制 调用 int 接收 功能 有一个
原文地址:https://www.cnblogs.com/wsl540/p/14482048.html