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
最新文章
- Python-08-Socket
- 《zw版·Halcon-delphi系列原创教程》 酸奶自动分类脚本(机器学习、人工智能)
- td元素
- GEMR: Get the parent window for view
- vc 实现打印功能
- Java中Comparable和Comparator实现对象比较
- Nodejs v4.x.0API文档学习(2)Assert断言测试模块
- Qt5-控件-QMenu,QMenuBar-菜单栏详解-菜单热键-菜单校验功能
- javascript 变量转义
- HDU 3639 Hawk-and-Chicken(Tarjan缩点+反向DFS)
- hdu 4463 Outlets(最小生成树)
- 使用VS Code开发调试.NET Core 2.0
- 201521123060 《Java程序设计》第10周学习总结
- java程序的加载过程
- 【Unity Shaders】Diffuse Shading——使用2D ramp texture来创建一个假的BRDF(双向反射分布函数)
- [爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP)
- 教师信息管理系统(方式一:数据库为oracle数据库;方式二:存储在文件中)
- luogu3380/bzoj3196 二逼平衡树 (树状数组套权值线段树)
- 常用的cpl 命令 运行直接打开控制台的简单方法
- ios实例开发精品文章推荐(8.19)
热门文章
- UVA 11374 Airport Express SPFA||dijkstra
- 使用前端后台管理模板库admin-lte(转)
- NSArray NSDictionary一些用法
- 任哲<;<;μC/OS>;>;
- STATUS CODE: 91, occurs when trying to move media from one volume pool to another.
- 【Codeforces Round #185 (Div. 2) B】Archer
- [Angular2 Form] Angular 2 Template Driven Form Custom Validator
- windows cmd 查看文件目录树
- <;Linux>; xm 命令
- [Angular] Adding keyboard events to our control value accessor component