【问题标题】:pyQt sub-menu backtrackpyQt 子菜单回溯
【发布时间】:2011-11-17 13:44:28
【问题描述】:

我有一个结构如下的菜单:

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

元素显示在菜单栏上的任何带有\ 的东西都有一个子菜单。

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

Qt 是否有可以查找顶部菜单的功能,或回溯的方式?

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

【问题讨论】:

    标签: qt pyqt pyqt4


    【解决方案1】:

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

    这些信号都传递了对被触发动作的引用,从而避免了将每个动作连接到单个插槽的需要。

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

    【讨论】:

      【解决方案2】:

      QSignalMapper 可能是您正在寻找的。​​p>

      【讨论】:

      • 信号映射器用于重新发送带有自定义标识符的信号,以便所有信号都可以由单个插槽处理。这意味着信号映射器需要连接到每个单独动作的triggered 信号,这似乎不是提问者想要的。
      【解决方案3】:

      我在下面找到了解决问题的另一种方法,但我会选择 ekhumoro 的答案,因为我认为他的答案更干净。

      backtrack = [str(event.text())]
      previousWidget = event.associatedWidgets()[0]
      while previousWidget.__class__.__name__ != 'QMenuBar':
          backtrack.append(str(previousWidget.title()))
          previousWidget = previousWidget.parent()
      print backtrack
      

      【讨论】:

        猜你喜欢
        • 2017-09-03
        • 1970-01-01
        • 1970-01-01
        • 2016-11-20
        • 1970-01-01
        • 2016-02-17
        相关资源
        最近更新 更多