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();是用于将窗口部件全屏显示,但是他只对窗 ...
随机推荐
- 【z09】关押罪犯
描述 S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"(一个正整 ...
- Instruction-Set Support for Invocation of VMM-Configured Services without VMM Intervention
A processing core comprising instruction execution logic circuitry and register space. The register ...
- linux系统 wm9713声卡配置 记录
近期在搞wm9713的外音播放和耳机的检測,搞了几天不负所望,最终搞定了.现记录例如以下,开发板为real210 v6.2版本号: 假设要让外音输出,那么确保wm9713的0x1c寄存器的值为0x12 ...
- php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误)
php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误) 一.总结 要点:a.层次遍历(队列) b.层次遍历中的层次(孩 ...
- CGI原理解析之二------WEB服务和CGI交互数据
#include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/wait.h ...
- [Typescript] Generics using TypeScript
In this lesson we cover the key reason why programming languages need generics. We then show how use ...
- html中的span有value属性么(可以作为自定义属性在jquery中用)
html中的span有value属性么(可以作为自定义属性在jquery中用) 一.总结 可以作为自定义属性在jquery中用 二.html中的span有value属性么 value并不是span标签 ...
- oracle 复制表数据,复制表结构
1.不同用户之间的表数据复制 对于在一个数据库上的两个用户A和B,假如需要把A下表old的数据复制到B下的new,请使用权限足够的用户登入sqlplus:insert into B.new(selec ...
- PathRemoveFileSpec 函数的作用:将路径末尾的文件名和反斜杠去掉(与GetModuleFileName配合)
PathRemoveFileSpec 函数的作用:将路径末尾的文件名和反斜杠去掉. 例如,我们想获取EXE文件自身所在的文件夹,可以这样: #include <stdio.h> #incl ...
- [Angular] Using directive to create a simple Credit card validator
We will use 'HostListener' and 'HostBinding' to accomplish the task. The HTML: <label> Credit ...