gpt4 book ai didi

c++ - Qt : which class should connect() signals and slots - inside or outside the view class?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:43:34 24 4
gpt4 key购买 nike

遵循良好的 MVC 实践,信号槽连接应该在哪里发生?我觉得它应该在 View 类之外,可能在具有指向 View 和模型对象的指针的专用 Controller 类中。

但这会带来一个复杂的问题,许多信号可能来自 View 类中的对象(例如 QPushButton)。这意味着我必须允许 Controller 打破 View 类的接口(interface)并访问其成员以设置 connect()。另一种方法是 connect() View 类中的东西,但是它直接与 Model 类接口(interface),这违背了试图通过 MVC 将它们分离的目的。

最佳答案

面向对象设计的目的之一就是封装。对于 View 类的用户来说,你如何实现这个类是无关紧要的。设计应首先着眼于方便的界面。然后你可以有一个使用小部件控件的实现,另一个可以是 ncurses-based ,还有一个可以使用 QML 等。这意味着理想情况下,类的内部在接口(interface)级别不应该是可见的。

信号槽机制的全部要点实际上是解耦连接中涉及的类:被连接的类之间不需要了解彼此。因此,从类外部建立连接是一个明智的起点,而且通常也是正确的。

为了帮助您完成此任务,您可以利用信号-信号连接。在 Qt 中,信号只是一种方法,其实现由机器生成。它在元数据中有不同的名称,但它是一个可调用的方法,就像插槽一样。因此,当被视为连接的目标时,信号和槽是等价的。您可以将信号连接到信号。信号-信号连接仅在调用源信号方法时调用目标信号方法。

关于c++ - Qt : which class should connect() signals and slots - inside or outside the view class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24948415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com