做网站简约学校网站,免费软件网站下载,会员管理系统登录,做网站需要什么技术事件传递
涉及到深层次窗口结构或者窗口封装时#xff0c;经常会遇到上层窗口接收不到事件的问题。排除这类问题需要了解窗口间的事件传递过程。
应用程序产生事件时#xff0c;事件会先派发给父窗口#xff0c;由父窗口在内部派发给子窗口#xff0c;子窗口会进一步传递…事件传递
涉及到深层次窗口结构或者窗口封装时经常会遇到上层窗口接收不到事件的问题。排除这类问题需要了解窗口间的事件传递过程。
应用程序产生事件时事件会先派发给父窗口由父窗口在内部派发给子窗口子窗口会进一步传递给子窗口的子窗口直到遍历到最后没有子窗口的窗口对象进入子窗口的用户事件处理函数。从子窗口开始事件会依次进入到父窗口的事件处理函数中子窗口可以调用event-accept()来中断事件的向上传递。总结来说是先下沉再上浮。
当发现父窗口没有对应的事件触发用户函数时首先要确认相关功能是否启用比如鼠标悬停和拖拽功能。其次需要在子窗口的事件处理函数中显式调用event-ignore()来使事件继续向上传递。
关于鼠标悬停移动和拖拽事件
具有父子关系的窗口如果想父窗口接收到上述事件必须将父窗口和所有的子窗口的相关功能全部启用否则事件会在中间某个窗口中断传递。
QGraphicsView中的事件
默认view不会将鼠标移动事件传递出来所以需要显式的在view中重载mouseEvent()并将事件ignore()将其传递出来这样做是为了将事件全部通知所有父子窗口。
QGraphicsScene中的事件
悬停事件在图元重叠时事件会被上层图元无父子关系拦截但是一般地图应用需求可能需要通知所有下层图元。此问题的解决办法见另一篇文章解决Qt graphis-view框架中上层图元接收hover事件导致底层图元接收不到的问题