popup组件问题分析

popup组件show时,会调用QApplication::openPopup函数
该函数调用下面的语句

//此两句是使得popup组件截取鼠标和键盘事件
QPaintDevice::qwsDisplay()->grabMouse(popup,TRUE);
QPaintDevice::qwsDisplay()->grabKeyboard(popup,TRUE);

//此句是把popup组件加到popup组件列表里
//然后可以调用inPopupMode语句判断是否存在popup组件
popupWidgets->append( popup );

QWSDisplay::grabMouse函数里调用了如下语句
//创建了一个截取鼠标的命令,把此命令的windowid置为popup组件的windowid
QWSGrabMouseCommand cmd;
cmd.simpleData.windowid = top->winId();

这些命令最终会被QWSServer::doClient函数处理
该函数会进一步调用QWSServer::invokeGrabMouse函数
该函数里把popup组件设定为截取鼠标事件的组件
mouseGrabbing = TRUE;
mouseGrabber = win;

最初分发鼠标事件的函数
QWSServer::sendMouseEvent
调用QWSServer::sendMouseEventUnfiltered

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值