使用 Qt 我有一个带有几个 QPushButton 按钮的 QStackedWidget。小部件的父小部件是 QMainWindow。在 QStackedWidget 中我也有一些 QLineEdit。我想做的很简单:验证包含文本框的表单,如果一切正常,则调用将处理数据的自定义类的函数。该类的实例是在我的 QMainWindow 类中创建的。调用该类方法的最佳方式是什么?我应该使用 Qt 的信号/槽机制将我的自定义类连接到 QStackedWidget 内的小部件实例吗?
最佳答案
您可以从 QValidator 中导出根据需要多次,并在每个需要验证的字段上安装验证器。这样,您就可以确保该字段为空或包含有效条目。
在处理您的数据之前,请确保所有适当的字段都有数据,这样您就可以保证您的表单有效。
将数据从表单传递给表单数据的某些消费者的典型方法是创建一个中间人类来保存数据。验证表单后会填充该类的一个实例,然后将该实例传递给消费者。这样,如果表单发生变化,只要收集相同的数据,您的消费者就不会受到这些变化的影响。
一般规则是针对对象接口(interface),而不是它们的实现。只要您牢记以下几点,无论您是执行 sig/slot 还是直接函数调用都没有关系:
Sig/slot 不保证调用顺序,发出信号本质上意味着任何可以看到该对象的人都可以连接到它的信号并拾取这个变化。如果您必须保证子组件处理表单数据的顺序,那为什么还要让维护程序员选择搞砸呢?
其次,对象所在的位置应该无关紧要。有一天,当你的数据消费者变得非常复杂,你想根据某些场景(可能是用户权限,或者今天的日期,或者当前的温度,我不知道!)捕捉一个不同的消费者,那么你会想重新做一个arch。如果您将数据提供给消费者的逻辑高度依赖于以某种方式驻留在表单中的对象,那么您就错了。
关于c++ - 调用父控件函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10141417/