日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

QTableview 获取鼠标坐标的item(QModelIndex)

發布時間:2025/5/22 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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表頭不隱藏,如果豎直方向的也沒隱藏,那么也要加上其寬度)。

以上就是我解決問題的過程。

轉載于:https://www.cnblogs.com/wangjian8888/p/10272570.html

總結

以上是生活随笔為你收集整理的QTableview 获取鼠标坐标的item(QModelIndex)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。