c++ - Qt中带有子菜单的可点击菜单项

标签 c++ qt menu

我正在用 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/

相关文章:

c++ - 唯一的 10 位序列 ID - 200 个 ID/秒

c++ - 构建 Qt - NMAKE : fatal error U1077: 'cd' : return code '0x2'

html - 我的 CSS 水平下拉菜单,子导航菜单项显示在彼此之上

Android:如何为自定义 View 创建上下文菜单

c++ - 使用属性 warn_unused_result [-Wunused-result] 声明的警告 : ignoring return value of 'int scanf(const char*, ...)' ,

c++ - 编写程序语言解释器

c++ - 调用void函数问题

c++ - 模板参数推导与 QT lambda 不匹配

c++ - 在 Qt 中单击图像时尝试立即显示用户编辑操作的结果

javascript - 在下拉菜单中将子列表项与父项对齐