我是靠谱客的博主 标致口红,最近开发中收集的这篇文章主要介绍Qt事件传递相关问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

事件传递

涉及到深层次窗口结构或者窗口封装时,经常会遇到上层窗口接收不到事件的问题。排除这类问题需要了解窗口间的事件传递过程。

应用程序产生事件时,事件会先派发给父窗口,由父窗口在内部派发给子窗口,子窗口会进一步传递给子窗口的子窗口,直到遍历到最后没有子窗口的窗口对象,进入子窗口的用户事件处理函数。从子窗口开始,事件会依次进入到父窗口的事件处理函数中,子窗口可以调用event->accept()来中断事件的向上传递。总结来说是先下沉再上浮。

当发现父窗口没有对应的事件触发用户函数时,首先要确认相关功能是否启用,比如鼠标悬停和拖拽功能。其次需要在子窗口的事件处理函数中,显式调用event->ignore()来使事件继续向上传递。

关于鼠标悬停移动和拖拽事件

具有父子关系的窗口,如果想父窗口接收到上述事件,必须将父窗口和所有的子窗口的相关功能全部启用,否则事件会在中间某个窗口中断传递。

QGraphicsView中的事件

默认view不会将鼠标移动事件传递出来,所以需要显式的在view中重载mouseEvent(),并将事件ignore(),将其传递出来,这样做是为了将事件全部通知所有父子窗口。

QGraphicsScene中的事件

悬停事件在图元重叠时,事件会被上层图元(无父子关系)拦截,但是一般地图应用需求可能需要通知所有下层图元。此问题的解决办法见另一篇文章:解决Qt graphis-view框架中,上层图元接收hover事件导致底层图元接收不到的问题

最后

以上就是标致口红为你收集整理的Qt事件传递相关问题的全部内容,希望文章能够帮你解决Qt事件传递相关问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部