Qt中QMenu的菜单关闭处理方法
来源:互联网 发布:河南郑州淘宝加盟 编辑:程序博客网 时间:2024/05/23 01:26
以下内容引用自
http://www.cnblogs.com/lingdhox/p/3474404.html
Qt中qmenu的实现三四千行...
当初有个特殊的需求, 要求菜单的周边带几个像素的阴影, 琢磨了半天, 用QMenu做不来, 就干脆自己用窗口写一个
然而怎么让菜单消失却非常麻烦
1. 点击菜单项
2. 点击其他地方
3. 被其他窗口遮挡
4. 按键啊
然后用判断焦点的方法吭哧吭哧写了, 做法类似弹出一个自动关闭的窗口.
但是菜单是可以多级的, 这就造成非常恶心的焦点传递. 虽然最终处理好了(代码好恶心- -!, 自己看得都想吐)
可惜天不遂人愿, 但其他窗口一起抢焦点的时候, 我的菜单就变成奇葩了. 想来想去也想不出解决方案来
终于还是看Qt的源码把.
看完之后, 豁然开朗, 想想自己以前怎么那么2呢. 简直是2到家了.
关键就是几行代码:
QAction *QMenu::exec(const QPoint &p, QAction *action){............ QEventLoop eventLoop; d->eventLoop = &eventLoop;................ (void) eventLoop.exec(); ...................}
QMenu 继承自QWiget, 并设置Qt::Popup类型
然后在下面几个事件中处理关闭即可.
mousePressEvent
mouseReleaseEvent
keyPressEvent
原因在于QEventLoop::exec展开消息循环后, 直接截获所有事件, 这样用户在桌面上的任意点击都能捕获到, 还有按键消息也一样.
关于eventloop嵌套, 可以看这篇文章, 乱谈Qt事件循环嵌套
阅读全文
0 0
- Qt中QMenu的菜单关闭处理方法
- Qt中QMenu的菜单关闭处理方法
- QMenu,QT的菜单添加
- 关于QT的菜单QMenu和QAction
- Qt: 隐藏菜单QMenu
- Qt: 隐藏菜单QMenu
- Qt: 隐藏菜单QMenu
- Qt: 隐藏菜单QMenu
- Qt 4.x实现QMenu菜单向上弹出菜单方法
- Qt的QMenu圆角处理
- 设置QMenu中菜单项的高度
- QT 中设置 QMenu的ICON大小
- qt中的菜单QMenu QAction
- qt中的菜单QMenu QAction
- QT QButton to QMenu自定义菜单
- Ubuntu环境下Qt中QMenu不现实图标的解决方法
- QT之菜单栏QMenu,下拉菜单QAction,工具栏QToolBar的使用(二)
- 【转】QT之菜单栏QMenu,下拉菜单QAction,工具栏QToolBar的使用
- JSP数据交互(一)
- .java语言基础-顺序结构
- windows下Python的Tkinter库的安装
- 【HDU3488】【网络流】【最小费用最大流】Tour 题解
- CentOS 6.4下安装Oracle 11gR2
- Qt中QMenu的菜单关闭处理方法
- Java中的访问控制
- java语言基础-if else结构
- 文章标题
- 常用的版本控制工具对比
- D
- 乱谈Qt事件循环嵌套
- java语言基础-if-else if-else结构
- 在spring MVC和hibernate项目中如何实现hibernate的session在请求发起时开启数据渲染后自动关闭