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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python爬虫QQ说说并分析朋友状况
- 下一篇: Capital one TPS整理