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

Posted

技术标签:

【中文标题】如何从 Qt 对话框中获取自定义信号【英文标题】:How to get custom signals from a Qt dialog box 【发布时间】:2019-09-04 09:41:07 【问题描述】:

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

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

在我的主窗体中,我可以使用

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

但是,我希望应用按钮执行相同的操作,但保持子对话框打开(而不是关闭它的确定按钮)。如何在主窗口中获得该信号?

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

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

我尝试过使用其他一些信号,例如完成,但我也无法弄清楚那个。

【问题讨论】:

【参考方案1】:

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

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)

【讨论】:

【参考方案2】:

您需要将QtCore.pyqtSignal applied 声明为类变量,然后使用self.applied.emit() 启动它

然后你就可以使用它了:

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

【讨论】:

以上是关于如何从 Qt 对话框中获取自定义信号的主要内容,如果未能解决你的问题,请参考以下文章

Qt信号槽如何附带自定义参数

Qt - 如何从 QListWidget 中获取选定的自定义项目?

Qt的高手,向你们请教下: 先谢谢了。我用Qt designer 设计了一个简单的ui ,想自定义一个简单的槽,不会

如何在自定义文件浏览对话框Qt C++中实现返回和下一步按钮

如何将自定义事件/信号从一个进程发送到 MacOS 中的另一个进程

QT自定义信号和槽