QT mapFromGlobal不是100%准确

2024-06-28 20:54:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用pyqt5,并尝试为表小部件内的组合框创建自定义上下文菜单。我用一个没有组合框的表格小部件成功地完成了这项工作,但我现在有点卡住了。我无法访问请求上下文菜单的组合框,因此无法将其映射到表。我现在尝试将全局光标位置映射到表,结果很接近,但不完全相同,因此我得到了错误的行/列组合。我在非组合框单元格上尝试了此操作,以便将实际位置与从光标映射的位置进行比较:

cursorPos = QCursor.pos()
print('\nCursor pos')
print(cursorPos)
mappedFromGlobal = self.table.mapFromGlobal(QCursor.pos())
print('\nMapped from global')
print(mappedFromGlobal)
print('\nGiven pos')
print(pos)

这是我从上述代码中得到的输出:

Cursor pos
PyQt5.QtCore.QPoint(933, 442)
Mapped from global
PyQt5.QtCore.QPoint(542, 159)
Given pos
PyQt5.QtCore.QPoint(519, 133)

给定的位置是customContextMenuRequested信号提供给我的单元格的真实位置,正如您所看到的,映射位置很接近,但不精确


Tags: frompos部件菜单globalpyqt5表格print
1条回答
网友
1楼 · 发布于 2024-06-28 20:54:50

所有基于QAbstractScrollArea的小部件,包括项目视图,都使用视口(参见documentation)来显示可滚动的内容,并且该视口可以有margins

对于项目视图,这些边距将自动设置为显示标题,并在已映射到视口的区域中接收鼠标事件。如果要跟踪全局位置,则需要手动将其映射到视口:

mappedFromGlobal = self.table.viewport().mapFromGlobal(QCursor.pos())

相关问题 更多 >