pyQt子菜单回溯

时间:2011-11-16 21:32:32

标签: qt pyqt pyqt4

我的菜单结构如下:

Elements
    A
    B
    C\
        1\
            a
            b
        2\
            a
            b
    D

在菜单栏上显示元素,\的任何内容都有子菜单。

在这个例子中,我有两个a。我希望能够区分哪个a被点击购买获得这样的列表,例如['a','1','C','Elements']。

Qt是否有能够查找顶级菜单或回溯方式的功能?

我不想在菜单中为每个QAction写一个连接,因为这会是很多额外的代码,而且我认为这是多余的。

3 个答案:

答案 0 :(得分:1)

利用QMenu.triggeredQMenuBar.triggeredQToolBar.actionTriggered信号。

这些信号都传递了对触发操作的引用,因此无需将每个操作连接到单个插槽。

另一种方法是创建QAction的子类,允许将处理程序作为参数传递给其构造函数。然后可以将所有样板连接代码分解到__init__方法中。如果在多个不同的菜单和工具栏中重复使用了大量操作,则此方法可以更灵活。

答案 1 :(得分:0)

QSignalMapper可能正是您要找的。

答案 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