要实现的功能是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表头不隐藏,如果竖直方向的也没隐藏,那么也要加上其宽度)。

以上就是我解决问题的过程。

转载于:https://www.cnblogs.com/wangjian8888/p/10272570.html

QTableview 获取鼠标坐标的item(QModelIndex)相关推荐

  1. python鼠标碰撞_获取鼠标指针测试item之间的碰撞

    python海龟画图碰撞动画演示 """ 获取鼠标指针测试item之间的碰撞 这份源代码展示了如何实时获取鼠标指针坐标, 如何进行碰撞检测,这样用海龟画图模块制作游戏方便 ...

  2. matlab鼠标三维坐标点,Matlab获取鼠标坐标值的两种途径

    第一种途径:ginput()函数 ginput提供了一个十字光标使我们能更精确的选择我们所需要的位置,并返回坐标值.函数调用形式为: [x,y] = ginput(n) [x,y] = ginput ...

  3. qt qlabel:获取当前坐标的rgb

    在label中画图:继承QLabel类重写paintEvent事件画图 void Label::paintEvent(QPaintEvent *event) {QPainter painter;//用 ...

  4. 获取用户坐标的html,html5获取用户地理位置

    可以通过H5的内置程序获得: if (navigator.geolocation) { var timeoutVal = 10 * 1000 * 1000; navigator.geolocation ...

  5. Windows核心编程_获取鼠标指定位置的RGB颜色值

    Windows核心编程_获取鼠标指定位置的RGB颜色值 大家平常会见到很多屏幕取色工具,其原理都是获取鼠标位置的屏幕像素点颜色! 一般思路都是:获取鼠标位置,然后取出鼠标指向的屏幕像素点颜色! Get ...

  6. Unity 获取鼠标点击转换世界坐标

    /// <summary> /// 获取鼠标点击坐标 /// </summary> Vector3 screenPosition;//将物体从世界坐标转换为屏幕坐标 Vecto ...

  7. python点击屏幕坐标_通过Python,如何获取鼠标在屏幕上的X、Y轴坐标点

    最近在开发基于模拟器的微信自动添加好友工具时,需要获取模拟器中相应按钮,在当前屏幕中的X.Y轴坐标点.先前都是通过"Ctrl+Alt+A"截屏的方式 获取.如下图红框部分所示: 由 ...

  8. 实现获取鼠标在QtableView上的几行几列的方法

    1 在Qt 设计师中右键QTableView槽函数,选中entered. 2 在构造函数中写上 ui->tableView->setMouseTracking(true);这样就可以获得Q ...

  9. 取得浏览器当前鼠标的X,Y坐标的JavaScript脚本及document元素的一些重要属性

    原文地址: http://www.lvjiyong.com/item/qude-dangqian-shubiao-de-X-Y-zuobiao-37525 为了让鼠标移到小图上显示大图,我利用鼠标事件 ...

最新文章

  1. 美国国防部CIO:企业IT可考虑用开源做数据分析
  2. xlrd、xlwt操作execl表格
  3. 【白话科普】10s 从零看懂 H5
  4. Asp程序做页面的301跳转,使得cnasda.com跳转到www.cnasda.com
  5. $_server['php_self'] 漏洞,Discuz! $_SERVER['PHP_SELF'] XSS Vulnerability
  6. 一个简单的录音软件程序代码【C++】
  7. php varexport,PHP函数补完:var_export()
  8. SpringBoot部署Jar文件,瘦身优化指南!
  9. ASP.NET 2.0 – 善用DataSourceMode属性 (转自章立民CnBlogs)
  10. java 手机类测试
  11. Sketch 54 中文版发布 新增深色模式
  12. ftp linux登录的命令行,linux登录ftp:lftp命令
  13. U-Net论文阅读笔记
  14. 后端开发总结(3):代码健壮性:容错处理+测试
  15. 【codevs 2830】蓬莱山辉夜
  16. python控制风扇_树莓派 温度监控 PWM 控制风扇 shell python c 语言
  17. 百万级海量数据内存数据库和数据库的性能对比
  18. 学生用计算机该如何关闭,学生晚上回宿舍时,其在实验室的计算机主机应关闭,显示器一般不用关闭。()...
  19. 学习Autodock分子对接
  20. 冠科生物宣布加快获得用于大规模筛查检测板的ATCC和NIH优质细胞系

热门文章

  1. Graph Search就是语义搜索
  2. java程序的运行结果依赖操作系统吗_java模拟试卷及答案及解析4
  3. CSS3中的transform变形
  4. JS OffsetParent属性深入解析
  5. 几大最短路径算法比较
  6. golang中ioutil
  7. makefile中使用变量
  8. Linux日志系统-08:定时执行脚本
  9. linux网络编程一:主机字节序与网络字节序的的判断
  10. springmvc十七:自定义视图和自定义视图解析器