Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调用父窗口小部件函数_C++_Qt4_Signals Slots - Fatal编程技术网

C++ 调用父窗口小部件函数

C++ 调用父窗口小部件函数,c++,qt4,signals-slots,C++,Qt4,Signals Slots,使用Qt,我有一个带有几个QPushButton按钮的QStackedWidget。小部件的父小部件是QMainWindow。在QStackedWidget中,我还有一些QLineEdit。我想做的很简单:验证包含文本框的表单,如果一切正常,则调用将处理数据的自定义类的函数。该类的实例是在我的QMainWindow类中创建的。调用该类的方法的最佳方式是什么?我应该使用Qt的signals/slots机制将我的自定义类连接到QStackedWidget内的小部件实例吗?您可以根据需要多次派生,并在

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

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

在处理您的数据之前,请确保所有适当的字段都有数据,并且保证您有一个有效的表单

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

一般规则是针对对象接口,而不是它们的实现。不管您是执行sig/slot还是直接函数调用,只要您记住以下几点:

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


其次,对象位于何处并不重要。有一天,当您的数据使用者变得非常复杂,并且您希望根据某些场景(可能是用户隐私,或者今天的日期,或者当前的温度,我不知道!)捕捉不同的数据使用者时,您将需要重新搜索。如果向使用者获取数据的逻辑高度依赖于表单中以某种方式驻留的对象,那么您就错了。

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