繁体   English   中英

Qt避免循环依赖

[英]Qt avoiding circular dependency

我有一个Qt应用程序,其主类GUIApplication从QMainWindow继承,如下所示。 GUI具有一个开始按钮,一个停止按钮和一个QGraphicsScene。

我的应用程序将从串行端口和其他内容读取数据,并根据收到的内容在QGraphicsScene上进行绘制。

我的主GUI类知道我的串行端口类,因为它必须在按下开始按钮等时对其进行初始化。这很好。 但是,我的串行端口类还必须能够与我的GUI类通信,因为它必须在接收数据和其他内容时更新QGraphicsScene。

我的问题是,知道我的GUI类对我的串行端口类来说也是一个不好的设计。 这不是两个类之间循环依赖的一种形式吗? 我计划让我的串行端口类的成员一个指向GUI类的指针。 这是唯一的方法,还是应该在串行端口类中注册回调以解耦类? 任何帮助表示赞赏,谢谢。

// GUI class
#include "MySerial.h "
class GUIApplication : public QMainWindow
{
    Q_OBJECT

public:
//.........

o_o

// Serial port class
#include "GUIApp.h "
class MySerial
{

public:
//..............
//write something on GUI`

这是一个糟糕的设计。 您的串行端口类与GUI本质上无关,因此应将其与GUI分开-除了循环依赖关系之外,您还应使其灵活性大大降低并限制其可用性。 有一天,您可能想在控制台应用程序中使用它,并且如果您以必须知道GUI类的方式编写该类,则必须对其进行修改,以使其能够与控制台一起使用,并且有两个版本那只会在没有太大意义的UI上有所不同,或者即使您不想破坏兼容性,也可以在控制台应用程序中不需要Qt作为依赖添加Qt,这也没有多大意义。

更好的解决方案是在收到数据后从您的串行端口类发送一些信号或一些有意义的返回码,然后使GUI类捕获此值并更新QGraphicsScene本身。 这样,您还摆脱了循环依赖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM