调用父窗口小部件函数

Posted

技术标签:

【中文标题】调用父窗口小部件函数【英文标题】:Call parent widget function 【发布时间】:2012-04-13 13:06:24 【问题描述】:

使用 Qt 我有一个带有几个 QPushButton 按钮的 QStackedWidget。小部件的父小部件是 QMainWindow。在 QStackedWidget 里面我也有一些 QLineEdit。我想做的很简单:验证包含文本框的表单,如果一切正常,调用将处理数据的自定义类的函数。该类的实例是在我的 QMainWindow 类中创建的。调用该类方法的最佳方法是什么?我应该使用 Qt 的信号/插槽机制将我的自定义类连接到 QStackedWidget 内的小部件实例吗?

【问题讨论】:

【参考方案1】:

您可以根据需要多次从QValidator 派生,并在每个需要验证的字段上安装验证器。这样,您可以确保该字段为空或包含有效条目。

在处理您的数据之前,请确保所有适当的字段都有数据,然后保证您拥有有效的表单。

将数据从表单传递给表单数据的某些消费者的典型方法是创建一个中间人类来保存数据。验证表单后填充类的实例,然后将该实例传递给使用者。这样,如果表单发生更改,您的消费者就不会受到这些更改的影响,前提是正在收集相同的数据。

一般规则是针对对象接口,而不是它们的实现。只要记住一些事情,您是执行 sig/slot 还是直接调用函数都没有关系:

Sig/slot 不保证调用顺序,发出信号本质上意味着任何能看到这个对象的人都可以连接到它的信号并接收这个变化。如果您必须保证子组件处理表单数据的顺序,那么为什么还要让维护程序员选择搞砸呢?

其次,对象所在的位置 无关紧要。有一天,当您的数据消费者变得非常复杂,并且您想根据某些情况(可能是用户权限,或者今天的日期,或者当前的温度,我不知道!)来获取不同的数据时,那么您将想做一个重新拱。如果您将数据提供给消费者的逻辑高度依赖于以某种方式驻留在表单中的对象,那么您做错了。

【讨论】:

验证数据后,我必须将这些数据传递给自定义类。在这种情况下信号/插槽系统是否合适,还是我应该使用其他东西? @Stefano 在验证数据之后,我认为我不明白信号/插槽与此有什么关系。你可以随心所欲地做。确定何时查看所有字段中是否有有效数据可能需要一个信号/槽;这取决于您的架构。 基本上,将验证数据传递给在父 QWidget 类中具有自己实例的自定义类方法的最佳方法是什么? @Stefano 请查看我的编辑。这是我最后一次尝试回答你的问题:)

以上是关于调用父窗口小部件函数的主要内容,如果未能解决你的问题,请参考以下文章

Dojo 1.9:当父窗口小部件启动时,placeAt 自动调用启动

从dijit内部调用父小部件函数复选框更改函数在dgrid内部lopcated

根据父窗口小部件的宽度和高度放置一个自动调整大小的窗口小部件

qt - 在父窗口/小部件类中初始化子小部件的目的是啥?

在Python Tkinter中获取父窗口小部件的父级

php 取消注册父窗口小部件