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上下文菜单处理函数的更多相关文章

  1. 【jQuery】smartMenu右键自定义上下文菜单插件(似web QQ)

    (前端用重点整理博客地址)链接地址:http://www.cnblogs.com/atree/archive/2011/06/30/jQuery-smartMenu-javascript.html 一 ...

  2. Android进阶(二十八)上下文菜单ContextMenu使用案例

    上下文菜单ContextMenu使用案例 前言 回顾之前的应用程序,发现之前创建的选项菜单无法显示了.按照正常逻辑来说,左图中在"商品信息"一栏中应该存在选项菜单,用户可进行分享等 ...

  3. 安卓开发笔记——Menu菜单组件(选项菜单,上下文菜单,子菜单)

    菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu). 菜单的实现 ...

  4. 不得不吐槽的Android PopupWindow的几个痛点(实现带箭头的上下文菜单遇到的坑)

    说到PopupWindow,我个人感觉是又爱又恨,没有深入使用之前总觉得这个东西应该很简单,很好用,但是真正使用PopupWindow实现一些效果的时候总会遇到一些问题,但是即便是人家的api有问题, ...

  5. android上下文菜单

    XML: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmln ...

  6. RCP:为指定的导航器添加上下文菜单

    可以参考Eclipse的Help->Help Content下的: Platform Plug-in Developer Guide > Programmer's Guide > P ...

  7. 【WP 8.1开发】上下文菜单

    在桌面系统中,别说是开发者,相信有资格考得过计算机一级的人都知道什么叫一下文菜单,或者叫右键菜单. 为了让操作更方便,在手机应用程序中,也应当有这样的菜单.上下文菜单之所以有”上下文“之说,是因为通常 ...

  8. Android成长日记-ContextMenu实现上下文菜单

    一. ContextMenu的组成 标题以及标题图标 菜单内容 菜单内容的点击事件 二. ContextMenu与OptionMenu的区别 OptionMenu对应的是activity,一个acti ...

  9. Java基础之扩展GUI——高亮元素、上下文菜单、移动旋转元素、自定义颜色(Sketcher 10)

    窗口应用程序. 本例在上一版的基础上实现了高亮元素.移动元素.上下文菜单.旋转元素.设置自定义颜色. 1.自定义常量包: // Defines application wide constants p ...

随机推荐

  1. Unity中surfaceShader的处理机制和finalColor

    http://blog.csdn.net/swj524152416/article/details/52945375

  2. Mac Python建立简单的本地服务器

    由于Mac自带Python 所以省去我们去下载了 打开终端  执行python stm-macmini:~ apple$ pythonPython 2.7.10 (default, Jul 14 20 ...

  3. EventBus的使用详解,功能为在Fragment,Activity,Service,线程之间传递消息

    最近跟同事用到了EventBus的使用,之前不太了解EventBus,查阅资料发现EventBus还挺好用的,用法比较简单,下面就把我看到的关于EventBus的博客分享给大家,里面介绍了很多的使用详 ...

  4. uitableview滚动到最后一行

    本文转载至 http://mrjeye.iteye.com/blog/1278521 - (void)scrollTableToFoot:(BOOL)animated { NSInteger s = ...

  5. Android设备各种使用尺寸整理

    // 获取屏幕的宽度.高度 Display defDip = getWindowManager().getDefaultDisplay(); int disWidth = defDip.getWidt ...

  6. 【BZOJ3769】spoj 8549 BST again DP(记忆化搜索?)

    [BZOJ3769]spoj 8549 BST again Description 求有多少棵大小为n的深度为h的二叉树.(树根深度为0:左右子树有别:答案对1000000007取模) Input 第 ...

  7. Storm伪分布式搭建

    配置zookeeper 下载zookeeper tar包 解压:tar -zxvf zookeeper-3.4.10.tar.gz -C /root/training/ 配置 cd /root/tra ...

  8. The hidden layers are either convolutional, pooling or fully connected.

    https://en.wikipedia.org/wiki/Convolutional_neural_network Convolutional layers apply a convolution ...

  9. 2017-2018-1 20179209《Linux内核原理与分析》第九周作业

    理解进程调度时机 进程调度时机 中断处理过程(包括时钟中断.I/O中断.系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule(): 内 ...

  10. 我的Android进阶之旅------>对Android开发者有益的40条优化建议

    下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题 对每个你像添加的特征重复上述过程.这种方法能够激 ...