【发布时间】:2016-07-15 16:49:19
【问题描述】:
我在屏幕上有一个可见的复杂小部件。通过按下按钮会出现一个对话框,但原始小部件的某些部分仍然可见。关闭对话框时,我想刷新我的特定小部件的一些数据...但这个小部件对那个对话框一无所知。我可以为此检查任何事件吗?或者任何其他方式来了解对话框何时关闭?
我第一次使用
virtual void QWidget::showEvent( QShowEvent* event );
但是当部件的部分已经可见时它不会被调用。
编辑
对不起,我不够精确。当我写复杂时,我的意思是我有一个主窗口,它有一个子窗口小部件,它也有子窗口小部件等等(关于文件级别)。该最低级别的子小部件启动对话框的打开。需要此对话框的关闭事件的另一个小部件也是嵌入式小部件,但在应用程序的其他位置。当我写sending the signal through many classes 时,我的意思是这个。在这种情况下,如果想通知我的最终小部件,我必须将来自源小部件的关闭信号连接到几个甚至对该信号不感兴趣的中间小部件。由于上述结构,我也不想(也不能)在主窗口中连接这些信号/插槽。在这有什么建议吗?
【问题讨论】:
-
我认为最好让小部件知道该对话框,也许有一个插槽连接到对话框的
finished信号 -
@Mike 这是不可能的。这是一个非常复杂的表单,有很多小部件。其中之一创建了对话框。我认为仅仅为此目的通过许多对象发送信号不是一个好主意。
-
最低级别的子小部件可以有一个信号,您可以连接到顶级小部件中的信号(是的,您可以这样做)。顶部和子级之间的层数无关紧要。您只需要两个信号和一个连接语句。 “我 [...] 无法在主窗口中连接这些信号/插槽,因为”但您可以!参见例如this question。我不知道如何向您证明它是微不足道的 - 请显示一些独立的代码;在没有
.ui文件的情况下手动生成子代以保持简单。