我的菜单结构如下:
Elements
A
B
C\
1\
a
b
2\
a
b
D
在菜单栏上显示元素,\
的任何内容都有子菜单。
在这个例子中,我有两个a
。我希望能够区分哪个a
被点击购买获得这样的列表,例如['a','1','C','Elements']。
Qt是否有能够查找顶级菜单或回溯方式的功能?
我不想在菜单中为每个QAction写一个连接,因为这会是很多额外的代码,而且我认为这是多余的。
答案 0 :(得分:1)
利用QMenu.triggered,QMenuBar.triggered和QToolBar.actionTriggered信号。
这些信号都传递了对触发操作的引用,因此无需将每个操作连接到单个插槽。
另一种方法是创建QAction
的子类,允许将处理程序作为参数传递给其构造函数。然后可以将所有样板连接代码分解到__init__
方法中。如果在多个不同的菜单和工具栏中重复使用了大量操作,则此方法可以更灵活。
答案 1 :(得分:0)
QSignalMapper可能正是您要找的。 p>
答案 2 :(得分:0)
我找到了解决这个问题的另一种方法,下面,但是我要回答ekhumoro的回答,因为我觉得他的感觉比较干净。
backtrack = [str(event.text())]
previousWidget = event.associatedWidgets()[0]
while previousWidget.__class__.__name__ != 'QMenuBar':
backtrack.append(str(previousWidget.title()))
previousWidget = previousWidget.parent()
print backtrack