QWidget上下文菜单处理函数
QWidget类是Qt中所有可视化部件的基类,其很多函数都是虚函数,能被子类重写以表现不同形式和功能,今天来学习一下QWdiget的事件处理函数。
事件是鼠标、键盘或系统因其自身某些状态发生改变而引起的,根据不同的发生源分为鼠标事件,键盘事件和系统事件。而发生源的不同状态发生改变又引起不同事件的发生,如鼠标左键单击事件,双击事件,右键单击双击事件等。
在python中,不同的事件都有相应的类对其进行描述。这些类一般通过参数,都描述了事件的各种状态,如鼠标事件QMouseEvent在初始化过程中就包含事件类型(如: QEvent::MouseButtonPress, QEvent::MouseButtonRelease, QEvent::MouseButtonDblClick, orQEvent::MouseMove)、哪个按键(左中右)、点击时鼠标的位置等信息。
当事件发生后,事件(事件类的实例)被路由给目标窗口(根据事件携带的信息匹配目标窗口),目标窗口再根据事件携带的信息匹配处理该事件的响应函数,如果顺利匹配,则调用该事件处理函数完成响应。因此事件处理函数的参数一般都是相对应的事件类。
一、virtual void contextMenuEvent(QContextMenuEvent *event)
响应上下文菜单事件(单击鼠标右键事件),用于产生一个上下文菜单(即右键菜单或弹出式菜单)
说明:
1.只有组件的contextMenuPlolicy属性为Qt::DefaultContextMenu时该事件响应函数才会被调用。默认情况下,该属性的值正是此值。
如果不想右键弹出菜单,可以通过函数setContextMenuPolicy(Qt::ContextMenuPolicy policy)将该属性设置为其它值,以不响应上下文事件。可选的参数如下:
| Constant | Value | Description |
|---|---|---|
Qt::NoContextMenu |
0 |
组件不具有上下文菜单,上下文菜单被推到组件的父窗口 |
Qt::PreventContextMenu |
4 |
该小部件不具有上下文菜单,与NoContextMenu相反,处理不会延迟到小部件的父级。 这意味着所有的鼠标右键事件都可以通过QWidget :: mousePressEvent()和QWidget :: mouseReleaseEvent()来保证传递到控件本身。 |
Qt::DefaultContextMenu |
1 |
组件的 QWidget::contextMenuEvent()被调用 |
Qt::ActionsContextMenu |
2 |
将组件QWidget::actions()返回的QActions当作上下文菜单项,右键后显示出来 |
Qt::CustomContextMenu |
3 |
组件发射 QWidget::customContextMenuRequested(Qpoint pt) signal.如果要自定义菜单,用这个枚举值,并自定义一个处理函数。注意由于该信号携带着点击处的坐标,因此在处理与坐标有关的右键事件时必须要用这个枚举值(比如:表格控件右键某个表头要对这列进行排序需要获取点击的列) |
2.重写该函数
def contextMenuEvent(self, event):
self.menu = QMenu('AA', self)
self.menu.addAction('bb')
self.menu.exec(cur.pos())#鼠标显示
至于contextMenuPlolicy属性的另外几种枚举值如何使用,请参考:http://blog.csdn.net/seanyxie/article/details/5825174
QWidget上下文菜单处理函数的更多相关文章
- 【jQuery】smartMenu右键自定义上下文菜单插件(似web QQ)
(前端用重点整理博客地址)链接地址:http://www.cnblogs.com/atree/archive/2011/06/30/jQuery-smartMenu-javascript.html 一 ...
- Android进阶(二十八)上下文菜单ContextMenu使用案例
上下文菜单ContextMenu使用案例 前言 回顾之前的应用程序,发现之前创建的选项菜单无法显示了.按照正常逻辑来说,左图中在"商品信息"一栏中应该存在选项菜单,用户可进行分享等 ...
- 安卓开发笔记——Menu菜单组件(选项菜单,上下文菜单,子菜单)
菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu). 菜单的实现 ...
- 不得不吐槽的Android PopupWindow的几个痛点(实现带箭头的上下文菜单遇到的坑)
说到PopupWindow,我个人感觉是又爱又恨,没有深入使用之前总觉得这个东西应该很简单,很好用,但是真正使用PopupWindow实现一些效果的时候总会遇到一些问题,但是即便是人家的api有问题, ...
- android上下文菜单
XML: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln ...
- RCP:为指定的导航器添加上下文菜单
可以参考Eclipse的Help->Help Content下的: Platform Plug-in Developer Guide > Programmer's Guide > P ...
- 【WP 8.1开发】上下文菜单
在桌面系统中,别说是开发者,相信有资格考得过计算机一级的人都知道什么叫一下文菜单,或者叫右键菜单. 为了让操作更方便,在手机应用程序中,也应当有这样的菜单.上下文菜单之所以有”上下文“之说,是因为通常 ...
- Android成长日记-ContextMenu实现上下文菜单
一. ContextMenu的组成 标题以及标题图标 菜单内容 菜单内容的点击事件 二. ContextMenu与OptionMenu的区别 OptionMenu对应的是activity,一个acti ...
- Java基础之扩展GUI——高亮元素、上下文菜单、移动旋转元素、自定义颜色(Sketcher 10)
窗口应用程序. 本例在上一版的基础上实现了高亮元素.移动元素.上下文菜单.旋转元素.设置自定义颜色. 1.自定义常量包: // Defines application wide constants p ...
随机推荐
- VMWare Workstation和VMWare vSphere(转)
VMware workstation一定是安装在window操作系统上的. VMware vSphere可以直接安装在x86机器上,使这台机器完全虚拟化. VMware vSphere主要是企业级用户 ...
- php党 强烈推荐TIPI:深入理解PHP内核
深入理解PHP内核(Thinking In PHP Internals) TIPI项目是一个自发项目, 项目主要关注PHP的内部实现, 以及PHP相关的方方面面, 该项目包括<深入理解PHP内核 ...
- eclipse 连接 hadoop集群
1 网上找插件 或者 自己编译 放到eclipse plugin里面 2 重启eclipse 配置MapReduceLocation 通吃端口为9001 9000 看你自己的配置 3 新建mapRed ...
- CentOS 7.x samba 服务器安装
以下以root用户执行 1.安装: # yum install samba samba-client -y 2.设置开机启动: # systemctl enable smb.service ln ...
- 3123: [Sdoi2013]森林
3123: [Sdoi2013]森林 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 3336 Solved: 978[Submit][Status] ...
- First non repeating word in a file? File size can be 100GB.
1 solution 1 1.1 数据结构 一个Hashmap和一个双向链表.如果想要快速获取first,并且只遍历一次,那么就要想到双向链表和HashMap的组合. 链表可以保证第一个在head处, ...
- thinkphp将APP_DEBUG常量设置为false后报错的问题
ThinkPHP 将 APP_DEBUG 常量设置为 false 后出现了下面的问题: Parse error: syntax error, unexpected T_STRING in \www\R ...
- 【译】StackOverflow——Java 中的 finally 代码块是否总会被执行?
问题 有一个 try/catch 代码块,其中包含一个打印语句.finally代码块总会被调用么? 示例: try { something(); return success; } catch (Ex ...
- python 安装anaconda, numpy, pandas, matplotlib 等
如果没安装anaconda,则这样安装这些库: pip install numpy pip install pandas pip install matplotlib sudo apt-get ins ...
- linux sort按照指定列排序
sort怎样按指定的列排序0000 27189 41925425065f 15 419254250663 7 419254250675 5 419254250691 76 419254250693 2 ...