调用父小部件功能

时间:2012-04-13 13:06:25

标签: c++ qt4 signals-slots

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

1 个答案:

答案 0 :(得分:3)

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

在处理您的数据之前,请确保所有相应的字段都包含数据,然后您就可以保证拥有有效的表单。

将数据从表单传递给表单数据的某个使用者的典型方法是创建一个中间类来保存数据。在验证表单后填充类的实例,然后将实例传递给使用者。这样,如果表单中有更改,则只要收集相同的数据,您的使用者就会与这些更改隔离开来。

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

Sig / slot不保证呼叫顺序,并且发出信号实质上意味着任何能够看到此对象的人都可以连接到其信号并选择此更改。如果必须通过子组件处理表单数据的保证顺序,那么为什么要给维护程序员一个搞乱的选项呢?

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