最近用pyqt5的QTabWidget,想做右键删除的功能,调用tabAt(QCursor().pos())却总返回-1,上网搜索资料也没找到详细的说明。
最后自己实验发现是因为tabAt()需要控件内的坐标,而QCursor().pos()返回的是鼠标相对于屏幕的坐标,需要进行转换。转换方法很简单,在QCursor().pos()的文档内也有说明:
也就是说,使用mapFromGlobal方法即可将全局坐标转化为控件内坐标:
# TableWidget获取item
itemPos = self.tableWidget.mapFromGlobal(QCursor().pos())
item = self.tableWidget.itemAt(itemPos)
# TabWidget获取Tab的index
tabPos = tabWidget.mapFromGlobal(QCursor().pos())
tabIndex = tabWidget.tabAt(tabPos)
即可获得相应信息