qt 点击qaction下拉箭头显示菜单时,移动菜单位置
时间: 2023-07-13 12:08:55 浏览: 82
如果你想通过鼠标拖动移动菜单的位置,可以使用 `QMenu` 的 `move` 函数。你可以在菜单的 `aboutToShow` 信号中连接一个槽函数,用于更新菜单的位置。下面是一个示例代码:
```python
from PyQt5.QtCore import QPoint
from PyQt5.QtWidgets import QAction, QMenu, QWidget, QVBoxLayout, QApplication
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 200)
layout = QVBoxLayout()
action = QAction("Action", self)
menu = QMenu(self)
menu.addAction("Menu Item 1")
menu.addAction("Menu Item 2")
menu.addAction("Menu Item 3")
action.setMenu(menu)
layout.addAction(action)
self.setLayout(layout)
menu.aboutToShow.connect(self.updateMenuPos)
def updateMenuPos(self):
menu = self.sender()
pos = menu.actionGeometry(menu.defaultAction()).bottomLeft()
pos = self.mapToGlobal(pos)
menu.move(pos)
if __name__ == '__main__':
app = QApplication([])
widget = MyWidget()
widget.show()
app.exec_()
```
在这个例子中,我们创建了一个 `QMenu`,并将其关联到一个 `QAction` 上。然后我们在 `QMenu` 的 `aboutToShow` 信号中连接了一个槽函数 `updateMenuPos`,用于更新菜单的位置。在 `updateMenuPos` 函数中,我们首先获取菜单的位置,然后将其转换为全局坐标系中的位置,最后使用 `QMenu` 的 `move` 函数将菜单移动到新的位置。
阅读全文