黑马程序员C语言教程:QT右键菜单的添加_黑马程序员c语言教程

2020-02-28 其他范文 下载本文

黑马程序员C语言教程:QT右键菜单的添加由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“黑马程序员c语言教程”。

创建Qt鼠标右键菜单

在平时使用Qt程序开发的时候,很多时候都会涉及到鼠标右键菜单的操作,以下对鼠标右键菜单的创建做一个系统的介绍: 菜单的创建方法主要分为两种:

第一种:通过事件处理器实现

重写事件处理器

void QWidget::mousePreEvent(QMouseEvent * event)或者 void QWidget::mouseReleaseEvent(QMouseEvent * event)当窗口接收到鼠标键消息,判断如果按下的鼠标右键则创建菜单对象: QMenumenu;给菜单对象添加菜单项(QAction)QAction*action1=menu.addAction(“C++学院”);QAction*action2=menu.addAction(“C++游戏学院”);显示右键菜单: menu.exec(QCursor::pos());示例:

voidWidget::mousePreEvent(QMouseEvent*ev){ if(ev->button()==Qt::RightButton){ QMenumenu;QAction*action1=menu.addAction(“C++学院”);QAction*action2=menu.addAction(“C++游戏学院”);menu.exec(QCursor::pos());} } 注意事项: 右键菜单显示的时候使用的坐标为屏幕坐标, 使用QCursor类的静态函数pos()可以直接得到鼠标右键按下时候的屏幕坐标。

第二种:使用与右键菜单有关的函数setContextMenuPolicy()void setContextMenuPolicy(Qt::ContextMenuPolicy policy)为QWidget的成员函数,从QWidget直接或间接派生的类都可以使用该函数对右键菜单进行设置。

Qt::ContextMenuPolicy是一个枚举类型,包括:

Qt::NoContextMenu、Qt::PreventContextMenu、Qt::DefaultContextMenu、Qt::ActionsContextMenu、Qt::CustomContextMenu 其中Qt::NoContextMenu、Qt::PreventContextMenu不能实现右键菜单的功能。

 Qt::DefaultContextMenu

设置此属性需要重写

void QWidget::contextMenuEvent(QContextMenuEvent * event)事件处理器函数来实现右键菜单

示例:

在窗口构造函数中设置右键菜单的处理方式: setContextMenuPolicy(Qt::DefaultContextMenu)重写对应的事件处理器函数:

voidWidget::contextMenuEvent(QContextMenuEvent*ev){ QMenumenu;QAction*action1=menu.addAction(“C++学院”);QAction*action2=menu.addAction(“C++游戏学院”);menu.exec(QCursor::pos());} 在窗口中单击鼠标右键,contextMenuEvent函数便会执行。 Qt::ActionsContextMenu

设置此属性后添加到当前窗口中所有QAction都会作为右键菜单项显示出来

示例:

在窗口构造函数中设置右键菜单的处理方式: setContextMenuPolicy(Qt::ActionsContextMenu)在当前窗口中添加QAction:

QAction*action1=newQAction(“C++学院”,this);QAction*action2=newQAction(“C++游戏学院”,this);this->addAction(action1);this->addAction(action2); Qt::CustomContextMenu

它是发出QWidget::customContextMenuRequested信号,注意仅仅只是发信号,意味着要自己写显示右键菜单的槽函数(slot)这个信号是QWidget唯一与右键菜单有关的信号(也是自有的唯一信号),同时也是很容易被忽略的signal: void customContextMenuRequested(const QPoint & pos)该信号的发出条件是:用户请求contextMenu(常规就是鼠标右击)且同时被击的widget

其contextMenuPolicy又是Qt::CustomContextMenu。

注意: 信号中的参数pos为当前窗口的坐标,并非屏幕坐标。示例:

// 在窗口构造函数中设置右键菜单的处理方式: setContextMenuPolicy(Qt::CustomContextMenu);//连接信号槽

connect(this,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(ShowContexMenu(QPoint)));// 自定义槽函数实现

voidWidget::ShowContexMenu(constQPoint&pos){ QMenumenu;QAction*action1=menu.addAction(“C++学院”);QAction*action2=menu.addAction(“C++游戏学院”);// 坐标系转换

QPointnewPt=this->mapToParent(pos);menu.exec(newPt);// 直接获取屏幕坐标也可以 // menu.exec(QCursor::pos());} 不管使用上述哪一种方法, 当我们在窗口中按下鼠标右键的时候, 都会显示出右键菜单, 如图:

黑马程序员c语言教程:SQL函数

大小写控制函数 大小写控制函数 字符控制函数数字函数ROUND 函数TRUNC 函数MOD 函数......

黑马程序员c语言教程:多表查询

1 笛卡尔积 部门表 笛卡尔积产生结果: 行数 两个表相乘列数: 行数相加 原因条件等值连接select ****from tab1, tab2where tab1.a = tab2.a1 select count(e.ename)2 from......

黑马程序员c语言教程:Oracle指令

--sql structured query language --DML--Data Manipulation Language--数据操作语言 query information (SELECT), add new rows (INSERT), modify existing rows (UPDATE)......

黑马程序员c语言教程:Oracle概念

一、选择行1.简单的SELECT 语句SELECT 字段名1 [AS] '字段名1 解释' FROM table; 2.处理NULL NVL函数可把NULL转换成其它类型的符号编程技巧: NVL函数在多条件模糊查询的......

黑马程序员c语言教程:Oracle指令

------------------------- --order by的用法--员工信息按照姓名正序排列select * from emp order by ename asc; --员工信息按照倒叙排列select * from emp order by ename......

《黑马程序员C语言教程:QT右键菜单的添加.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
黑马程序员C语言教程:QT右键菜单的添加
点击下载文档
相关专题 黑马程序员c语言教程 黑马 程序员 右键菜单 黑马程序员c语言教程 黑马 程序员 右键菜单
[其他范文]相关推荐
[其他范文]热门文章
下载全文