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

最佳答案

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

在处理数据之前,请确保所有适当的字段都有数据,并且可以确保您具有有效的表单。

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

一般规则是针对对象接口(interface),而不是其实现。只要您牢记一些注意事项,是否执行sig / slot或直接函数调用都没有关系:

信号/插槽不保证 call 顺序,发出信号本质上意味着可以看到此对象的任何人都可以连接到其信号并拾取此更改。如果您必须确保按子组件处理表单数据的顺序,那为什么还要给维护程序员一个困惑的选择呢?

其次,对象所在的位置无关紧要。某天,当您的数据使用者变得非常复杂,并且您想要根据某种情况(例如用户privs,今天的日期或当前的温度,我不知道!)来选择一个不同的用户时,您将想做一个重新拱门。如果将数据传递给使用者的逻辑高度依赖于表单中以某种方式驻留的对象,那么您做错了。

09-10 03:25
查看更多