Qt 全局应用程序菜单在模式对话框中处于活动状态(在Linux上)

Qt 全局应用程序菜单在模式对话框中处于活动状态(在Linux上),qt,ubuntu,pyqt,pyside,Qt,Ubuntu,Pyqt,Pyside,我正在Windows和Linux(Ubuntu)上用PySide开发一个应用程序。在Windows上,一切正常。但是在Linux上,当我在应用程序中打开一个模式对话框(甚至是系统对话框,例如OpenFileDialog)时,全局应用程序菜单仍然保持可见和活动状态。那么情态的含义是什么呢 我知道这可能与此重复: 根据它,如果我理解得很好,我必须在每个对话框中保留对全局应用程序菜单的引用,并在打开模式对话框时禁用所有菜单操作。并在关闭时启用它。很难相信这是唯一的选择。这只是愚蠢的过度使用 那么,还有

我正在Windows和Linux(Ubuntu)上用PySide开发一个应用程序。在Windows上,一切正常。但是在Linux上,当我在应用程序中打开一个模式对话框(甚至是系统对话框,例如OpenFileDialog)时,全局应用程序菜单仍然保持可见和活动状态。那么情态的含义是什么呢

我知道这可能与此重复:

根据它,如果我理解得很好,我必须在每个对话框中保留对全局应用程序菜单的引用,并在打开模式对话框时禁用所有菜单操作。并在关闭时启用它。很难相信这是唯一的选择。这只是愚蠢的过度使用

那么,还有其他解决方法吗?例如,将菜单栏保持在主窗口标题栏下方,就像我们在Windows中所做的那样。。。我知道它可能不是本地Linux的“感觉和外观”,但它比在模态windows中使用全局菜单要好得多


或者我缺少了一些简单而明显的解决方案?

实际上,您可以通过禁用
QMenu.nativeMenuBar
属性,将菜单栏保持在窗口标题的正下方,以避免出现此问题

以下是PyQt4的示例:

from PyQt4 import QtGui


class MainWindow(QtGui.QMainWindow):

    def __init__(self, parent = None):
        super(MainWindow, self).__init__(parent)

        menu_bar = self.menuBar()
        # Deactivate global menu bar on Ubuntu
        menu_bar.setNativeMenuBar(False)
        # Add menu for show
        menu_bar.addMenu('Some menu...').addAction('Hit me!')

        # Open modal dialog for test
        self.button = QtGui.QPushButton('Open dialog', self)
        self.setCentralWidget(self.button)
        self.button.clicked.connect(
            lambda: QtGui.QMessageBox.information(self, 'Hello!', "I'm really modal")
            )


if __name__ == '__main__':
    import sys

    app = QtGui.QApplication(sys.argv)

    w = MainWindow()
    w.show()

    sys.exit(app.exec_())

我发现这有一个bug标签:不过,在bug解决之前,任何解决方法都是不错的。