如何从 Qt 对话框中获取自定义信号

How to get custom signals from a Qt dialog box

我有一个带有 3 个按钮的 QDialog - 应用、确定和取消。在对话框的 __init__ 方法中,我使用以下方法连接 OK 和 Cancel:

buttonBox.accepted.connect( self.accept )
buttonBox.rejected.connect( self.reject )

在我的主窗体中,我能够使用

运行 OK 信号的方法 (addNameToSandbox)
self.__nameDialog.accepted.connect(self.__addNameToSandbox)

但是,我希望“应用”按钮执行相同的操作但保持子对话框打开(而不是关闭它的“确定”按钮)。我怎样才能在主 window 上获得该信号?

我在子对话框中有一个方法,当单击“应用”时我可以运行,但是我不知道如何在主窗体中触发一个动作,我不知道。

buttonBox.button( QtGui.QDialogButtonBox.Apply ).clicked.connect( self.add )

我试过使用其他一些信号,比如 finished,但我也想不通。

您需要将 QtCore.pyqtSignal applied 声明为 class 变量,然后用 self.applied.emit()

启动它

那你就可以使用了:

self.__nameDialog.applied.connect(self.__applyPressed)

在对话框中创建一个信号并将其连接到应用按钮的点击,然后在您的主窗体中使用信号连接它:

class YourDialog(QtGui.QDialog):
    applyClicked = QtCore.pyqtSignal()

    def __init__(self, parent=None):
        super(YourDialog, self).__init__(parent):
        # ...
        buttonBox.accepted.connect(self.accept)
        buttonBox.rejected.connect(self.reject)
        apply_button = buttonBox.button(QtGui.QDialogButtonBox.Apply)
        apply_button.clicked.connect(self.applyClicked)
        # ...
self.__nameDialog.accepted.connect(self.__addNameToSandbox)
self.__nameDialog.applyClicked.connect(self.__applyfunc)