擅长:python、mysql、java
<p>通常,父节点应该始终是执行信号连接的那个。让子控件在父控件上建立连接是有问题的,因为它对父控件设置了限制并导致副作用,并且在父控件的所有权被转换为子控件的情况下会完全中断。在</p>
<p>在您的例子中,有两个选项我认为是“正确的”。如果对话框至少应该是持久的,而不是要以模式运行,那么它应该定义一个父类连接到的信号。对话框不应该删除自己,这应该是父类在接收到信号后的责任。在</p>
<p><strong>main窗口</strong></p>
<pre><code>def on_pushbutton_clicked(self):
if not self.dlg:
self.dlg = DialogWindow(self)
self.dlg.mySignal.connect(self.on_mySignal)
self.dlg.show()
def on_mySignal(value):
self.dlg.mySignal.disconnect()
self.dlg.close()
self.dlg.deleteLater()
self.dlg = None
self.updateLabelAnswer(value)
</code></pre>
<p>您的对话似乎是一个临时的对话,它的存在只是为了收集输入,可能应该以模式运行。在这种情况下,你甚至不需要定义任何信号。只需创建类并提供一个API来获取文本框的值。在</p>
<p><strong>对话框窗口</strong></p>
^{pr2}$
<p><strong>在主窗口中</strong></p>
<pre><code>def on_pushbutton_clicked(self):
dlg = DialogWindow(self)
if dlg.exec_():
value = dlg.getValue()
</code></pre>