QTableview 获取鼠标坐标的item(QModelIndex)
要实现的功能是QTableview中Item项上右键弹出菜单
这就必然要判断点击右键时鼠标指针是否在QTableView的Item上
如果是QTableWidget可以用itemAt来判断
QTableView通过查看文档 发现有个indexAt函数 返回QModelIndex
QModelIndex QTableView::indexAt(const QPoint & pos) const [virtual]
Reimplemented from QAbstractItemView::indexAt().
Returns the index position of the model item corresponding to the table item at position pos in contents coordinates.
于是通过如下代码判断鼠标右键单击的时候,鼠标指针是否在item上
qDebug()<<ui->tableview->indexAt(ui->tableview->mapFromGlobal(QCursor::pos())).row();
可是发现一些问题:
当鼠标右键点击第一行的上边缘附近 返回0
点击第一行中间 返回1
点击最后一行中间就返回 -1
也就是说 点击行A的上边缘附近 返回的是A的上一行
只有点击行A的中间返回的才是A行
并不是 indexAt函数所描述的那样返回的是当前行
最后发现问题出在:
indexAt函数根据QPoint判断行的时候 是没有把 QTableView的表头去掉的 (HoriziotalHeader和VerticalHeader)
所以 隐藏表头后 就一切正常了
如果不愿意隐藏表头 我是用如下代码 解决的:
QPoint pt = ui->tableview->mapFromGlobal(QCursor::pos());
int height = ui->tableview->horizontalHeader()->height();
QPoint pt2(0,height);
pt+=pt2;
qDebug()<<ui->tableview->indexAt(pt).row();
现在debug输出就一切正常了(上面只是针对QtableView上面的horizontal表头不隐藏,如果竖直方向的也没隐藏,那么也要加上其宽度)。
以上就是我解决问题的过程。
QTableview 获取鼠标坐标的item(QModelIndex)的更多相关文章
- javaScript中获取鼠标位置的理解
获取鼠标坐标值的总结为了避免混淆知识点 通过<javaScript高级程序设计>查到这些 event.clientX event.clientY event.pageX event.pag ...
- winform Chart控件 获取鼠标处坐标值方法
Chart控件本身功能强大,应用广泛,因此其属性.方法也很多.此处介绍在很多应用中需要查看鼠标位置处坐标值的一些方法 1,调用Chart事件 GetToolTip 利用ToolTipEventArg ...
- 在屏幕上搜索图片并返回图片所在位置的坐标的AutoHotkey脚本源代码(类似大漠插件)
;~ 在屏幕上搜索图片并返回图片所在位置的坐标的AutoHotkey脚本源代码(类似大漠插件) ; https://www.autohotkey.com/boards/viewtopic.php?t ...
- C++获取鼠标位置及全局检测鼠标行为
1.获取鼠标位置(在屏幕的位置) CPoint m_mouse; GetCursorPos(&m_mouse); 2. 屏幕转化为客户端(控件的相对位置)& 客户端位置转化为屏幕位置 ...
- Adobe Edge Animate –获取鼠标位置及跟随鼠标功能实现
Adobe Edge Animate –获取鼠标位置及跟随鼠标功能实现 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在网络上浏览有关Edge相关问题的时 ...
- VS编程,WPF中,获取鼠标相对于当前屏幕坐标的一种方法
原文:VS编程,WPF中,获取鼠标相对于当前屏幕坐标的一种方法 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/det ...
- VS编程,WPF中,获取鼠标相对于当前程序窗口的坐标的一种方法
原文:VS编程,WPF中,获取鼠标相对于当前程序窗口的坐标的一种方法 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/ ...
- 兼容IE FF 获取鼠标位置
由于Firefox和IE等浏览器之间对js解释的方式不一样,firefox下面获取鼠标位置不能够直接使用clientX来获取.网上说的一般都是触发mousemove事件才行.我这里有两段代码,思路都一 ...
- JS获取鼠标位置,兼容IE FF
由于Firefox和IE等浏览器之间对js解释的方式不一样,firefox下面获取鼠标位置不能够直接使用clientX来获取.网上说的一般都是触发mousemove事件才行.我这里有两段代码,思路都一 ...
随机推荐
- CodeForces - 1025B Weakened Common Divisor
http://codeforces.com/problemset/problem/1025/B 大意:n对数对(ai,bi),求任意一个数满足是所有数对中至少一个数的因子(大于1) 分析: 首先求所有 ...
- PS2模拟器 PCSX2 新手向
1.模拟器的下载 1.1百度网盘地址:http://pan.baidu.com/s/1i3kt7bJ (已经整合了PS2BIOS的模拟器下载,比较新的版本,适合新手) 1.2高端玩家可以下载: 官网g ...
- 20190418 CentOS7实用技能综合:系统安装 + WinScp客户端连接 + 防火墙端口号iptables + Nginx编译安装 + MySQL编译安装 + Redis编译安装 + MongoDB编译安装 + ActiveMQ/RocketMQ/RabbitMQ编译安装 + ...各类常用生产环境软件的编译安装
系统安装 + WinScp客户端连接 + 防火墙端口号iptables + Nginx编译安装 + MySQL编译安装 + Redis编译安装 + MongoDB编译安装 + ActiveMQ/Roc ...
- Zynq-7000 FreeRTOS(一)系统移植配置
软件版本:VIvado HLx 2018.2 从FreeRTOS的官网中下载源代码: https://www.freertos.org/a00104.html 图:FreeRTOS的官网 上图中,点击 ...
- ActionController::UnfilteredParameters: unable to convert unpermitted parameters to hash
rails 开发中 5.1版本使用binding.pry会报 ActionController::UnfilteredParameters: unable to convert unpermitted ...
- Windows下的SASS环境搭建
虽然眼下 CSS 预编译框架不少,但 SASS 已经逐渐成为主流了,为了更好的适应社会,满足市场需求,获取新技能是必须的. 之前一直想使用 SASS,但都碍于它需要在 ruby 环境下编译而退缩了,这 ...
- Java Servlet 缺点
1.web.xml配置比较多 2.servlet具有容器依赖性(tomcat没有启动,就没有用)
- Digitale Logik
1.Zahl System und Code System 1.1 Die Rechnung des Ergänzungscode 1.2 Manche häufig verwendet Code 1 ...
- CPU缓存一致性协议与java中的volatile关键字
有关缓存一致性协议MESI自行百度. 提出问题:volatile在缓存一致性协议上又做了哪些事情?为啥它不保证原子性? 在缓存一致性协议下,CPU为了执行效率使用了写(存储)缓存和失效队列从而导致对用 ...
- [转]Sql Server 分页存储过程
本文转自: 版权声明:作者:jiankunking 出处:http://blog.csdn.net/jiankunking 本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且 ...