qt的pos()和globalpos()(globalpos是相对于桌面的)
参考:http://www.cppblog.com/izualzhy/archive/2011/03/21/142408.html
原文粘贴:
menu = new QMenu("menu", this); //menu在头文件声明
QAction *action = new QAction(tr("1111"), this); //为使目录较大,能看见,我们添加一个action
menu->addAction(action);
然后在mousePressEvent里看到效果
void Dialog::mousePressEvent(QMouseEvent *e)
{
if(e->button() == Qt::RightButton) //鼠标右键。避免无法关掉窗口
{
QPoint p(0, 0);
//menu->exec(p); //测试用,坐标相对于桌面
menu->exec(e->globalPos()); //坐标相对于窗口
//menu->exec(e->pos()); //坐标相对于桌面
}
}
可以看到,pos不管窗口怎样移动,menu总是出现在相同的地方。globalPos相对于窗口,跟着窗口移动.
pos不管窗口怎样移动,menu总是出现在相同的地方。
假设我们一直点击的是窗口右上角,menu总是出现在同样的地方。也就是类似于执行menu->exec(QPoint(1000,0))
所以p的值没变,但相对于桌面我们点的地方已经变了,只是相对窗口的坐标p一直是(1000,0),所以pos是相对窗口的。。。
globalPos相对于窗口,跟着窗口移动。不论我点哪菜单就在哪show,所以是相对桌面的,要不叫global呢~~
//------------------------------------------------------------------------------------------------------------------------------------------------------------
上面的解释拘谨于表面现象,得出的结论有点误导人。本人在程序中通过添加QLabel实例显示坐标信息,得知
globalPos(),给出的坐标信息是相对于桌面的,即以桌面左上角为原点。
pos(),是相对于窗口的,以窗口左上角为原点(去除边框)。即pos()给出的是一个相对位置坐标。而globalPos(),给出的是一个绝对坐标。
上例中巧用了一个上下文菜单来说明问题,因为上下文菜单出现的位置就是此时要设定的位置。
在qt4编程第2版中提到关于创建上下文菜单的方法:
1.重新实现QWidget::contextMenuEvent()函数,创建一个QMenu窗口部件,在其中添加所期望的那些动作,并用再对该窗口调用exec()函数。
2.设定窗口部件的contextmeunupolicy为Qt::ActionsContextMenu然后往窗口部件里面添加QAction实例。
http://blog.csdn.net/u013394556/article/details/38797295
qt的pos()和globalpos()(globalpos是相对于桌面的)的更多相关文章
- PyQt(Python+Qt)入门:Designer组件属性编辑界面中QWidget类相关属性详解
本文适用人员:本文比较长,适合不理解Qt Designer部件属性的人员阅读或资料查找. 声明: 1.如果有人认为本文是简单的复制粘贴+翻译而成,敬请读本文最后的后记: 2.本文为老猿Python学习 ...
- 基于C/S架构的3D对战网络游戏C++框架_04客户端详细设计与OpenGL、Qt基础
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- 将Unreal4打包后的工程嵌入到Qt或者桌面中
#include "widget.h" #include "ui_widget.h" #include "windows.h" #inclu ...
- linux(debian) arm-linux-g++ v4.5.1交叉编译 embedded arm 版本的QtWebkit (browser) 使用qt 4.8.6 版本
最近需要做一个项目 在arm 架构的linux下 没有桌面环境的情况下拉起 有界面的浏览器使用. 考虑用qt 的界面和 qtwebikt 的库去实现这一系列操作. 本文参考: Qt移植到ARM Lin ...
- Qt 4.7.4 完美动态编译发布动态调试,以及静态编译发布
首先是准备工作,去QT主页下载独立的QT类库安装包以及完整QT SDK安装包,还有QT Creator for windows 版 下载地址:http://qt.nokia.com/downloads ...
- linux(debian) arm-linux-g++ v4.5.1交叉编译 embedded arm 版本的QtWebkit (browser) 使用qt 4.8.6 版本 以及x64上编译qt
最近需要做一个项目 在arm 架构的linux下 没有桌面环境的情况下拉起 有界面的浏览器使用. 考虑用qt 的界面和 qtwebikt 的库去实现这一系列操作. 本文参考: Qt移植到ARM Lin ...
- Qt核心机制与原理
转: https://blog.csdn.net/light_in_dark/article/details/64125085 ★了解Qt和C++的关系 ★掌握Qt的信号/槽机制的原理和使用方法 ★ ...
- QT在Linux下的安装
QT是一个跨平台的C++开发库,设计思想是同样的,C++无需修改就可以在windows.linux.macOS等平台上使用,他使开发更专注于构建软件的核心价值,而不是维护API.作为面向对象的框架,它 ...
- Qt的窗口的最大化。
1.window.showFullScreen()//此方法只对顶级窗口有效,对子窗口无效 QT中窗口部件QWidget成员函数showFullScreen();是用于将窗口部件全屏显示,但是他只对窗 ...
随机推荐
- 【BZOJ 3238】[Ahoi2013]差异
[链接]h在这里写链接 [题意] 还有更简洁的题目描述吗/xk [题解] 对于lenti+lentj这一部分,比较好处理. 可以弄一个前缀和. 然后O(N)扫描一遍. ...
- ORA-00119: invalid specification for system parameter LOCAL_LISTENER;
错误提示内容及上下文环境: SQL> grant sysdba to weng;grant sysdba to weng*第 1 行出现错误:ORA-01034: ORACLE not avai ...
- 关于Altium Designer的一些设置
把原理图设置成A4纸张,是为了便于打印机打印出原理图来 原理图一定一定要和pcb图保持一致,这样是为了以后查找错误方便...
- VC6.0 MFC中WebBrowser控件禁止新窗口弹出的解决办法
http://blog.csdn.net/gnorth/article/details/7258293 分类: WebBrowser MFC 禁止新窗口2012-02-14 15:25 1787人阅读 ...
- jQuery获取多种input值的方法(转)
获取input的checked值是否为true: 第一种: if($("input[name=item][value='val']").attr('checked')==true) ...
- jQuery常用方法(持续更新)(转)
0.常用代码: 请容许我在1之前插入一个0,我觉得我有必要把最常用的代码放在第一位,毕竟大部分时间大家都是找代码的. (1)AJAX请求 $(function() { $('#send').click ...
- mysql数据库 navicat premium mac 破解教程
https://www.jianshu.com/p/f3ef78deadaa 转自Navicat Premium for Mac v12.0.22.0 破解教程,macOS上手动破解,无需补丁,无毒 ...
- 【2186】Popular Cows(强连通分支及其缩点)
id=2186">[2186]Popular Cows(强联通分支及其缩点) Popular Cows Time Limit: 2000MS Memory Limit: 65536 ...
- 清楚arp
转载:http://wscyza.blog.51cto.com/898495/728717/ linux系统下清空arp 缓存(清空arp表)方法 命令红色字体标记 系统初始arp环境 [ro ...
- Android 虚拟机学习总结Dalvik虚拟机介绍
1.Dalvik虚拟机与Java虚拟机的最显著差别是它们分别具有不同的类文件格式以及指令集.Dalvik虚拟机使用的是dex(Dalvik Executable)格式的类文件,而Java虚拟机使用的是 ...