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. Pycharm context menu disable RUN option

    这个问题很坑.正常来说一个文件右键出来的是 Run 选项, 可是近期几个文件都是 Unititest 的測试选项,每次要执行的时候都要手工去配置Run Option,在尝试了: 0. 重置IDE配置 ...

  2. 取消eclipse js验证

    去掉Eclipse中的Validating 最近我的Eclipse一直经常效验javascript,我疯了校验了一个多小时还是在验.我只能在项目的.project文件中: 去掉.project文件中的 ...

  3. requestFullscreen实现全屏展示

    requestFullscreen实现全屏展示. var fullContainer = document.getElementById('fullScreenContainer'); //先把元素展 ...

  4. 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1<p<=1e6,p必须为素数

    typedef long long ll; /********************************** 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1&l ...

  5. 【BZOJ3270】博物馆 期望DP+高斯消元

    [BZOJ3270]博物馆 Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n ...

  6. 2.PyCharm安装和使用之HelloWorld

    百度搜一个就好了, 然后下一步下一步 重点来了,穷!   这软件需要购买不然就只能用30天, 作为屌丝的我,在网上不然的搜索: 然后终于搞定了! 屌丝的春天:http://idea.lanyus.co ...

  7. flex (html弹性布局)

    flex是什么? 任何容器都可以指定为flex布局: .box{ display: flex;  /* 行内元素可以使用:inline-flex,webket内核浏览器必须 -webkit-flex ...

  8. 我的Android进阶之旅------>android中getLocationInWindow 和 getLocationOnScreen的区别

    View.getLocationInWindow(int[] location) 一个控件在其父窗口中的坐标位置 View.getLocationOnScreen(int[] location) 一个 ...

  9. 【翻译自mos文章】在重建控制文件之前应该考虑的事情

    在重建控制文件之前应该考虑的事情 来源于: Things to Consider Before Recreating the Controlfile (文档 ID 1475632.1) 适用于: Or ...

  10. python cookbook第三版学习笔记十八:可由用户修改的装饰器

    定义一个属性可由用户修改的装饰器: 在前面的介绍中使用装饰器来包装函数,这一章来介绍下如何让用户调整装饰器的属性. 首先来看下代码: from functools import wraps,parti ...