我正在用 Qt 4.6 编写。我想知道是否有可能实现这样一个菜单项,它可以被触发,而且还有一个子菜单。单击它会触发相关操作,悬停它会导致子菜单出现。
最佳答案
首先让我说这不是一个好的攻击计划。这里有一些极端情况,需要花费大量时间和代码才能恰到好处,并且可能需要针对每个操作系统进行定制。
话虽如此,但实际的实现并不太复杂。只需将您从中创建子菜单的 QMenu 子类化,并覆盖事件处理程序,在进行“选择”时强制关闭父菜单。像下面这样的东西基本上可以工作:
from PyQt4 import QtCore, QtGui
import sys
app = QtGui.QApplication(sys.argv)
widget = QtGui.QMainWindow()
widget.resize(250,150)
menu = widget.menuBar().addMenu("test")
class submenu(QtGui.QMenu): #Override the submenu class
def __init__(self,name):
QtGui.QMenu.__init__(self,name)
def mouseReleaseEvent(self,event): #catch mouseRelease Events
global menu
QtGui.QMenu.mouseReleaseEvent(self,event)
if not self.rect().contains(event.pos()):
print("Parent Selected")
menu.hide() #If the parent was selected, hide it
else: #Likely ignore these
print("Parent NOT Selected")
def c():
print("Sub-item selected")
cMenu = submenu("Sub-menu")
menu.addMenu(cMenu)
actionC = QtGui.QAction("sub-item",widget)
actionC.triggered.connect(c)
cMenu.addAction(actionC)
widget.show()
sys.exit(app.exec_())
关于c++ - Qt中带有子菜单的可点击菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3771654/