1、导读
Qt在很多人的认知中是一个制作界面的框架,只用于界面,后端往往是用别的东西实现的。 在我的实践中,用Qt实现了接口和后端的实现。
2、软件分层
一般来说,我们的软件体系结构有很多层。 在这里,分为三个层次就足够了,如下图所示。
2.1 GUI层
这里基于Qt,所以这一层都是在Qt的类库中实现的,所有的主界面都继承自这三个类: QWiget、QMainWindow、QDialog中的一个,用main函数进行实例我自己习惯用QWiget,不用UI文件,所有的接口都在new上出来,用代码进行布局。
2.2模型层
model层主要实现我们软件的业务逻辑,这里的模块根据整个软件的业务逻辑对模块进行合理划分,达到较好的凝聚松耦合效果。 在这里,我们将讨论关于这些业务逻辑,在那里出现了new的问题。 我的方法是创建一个bridge类,然后用这个bridge类实例化所有的业务逻辑类。
2.3通信层
在这一层,就是实现数据的收集。 通信方式多种多样,有串行端口、网络端口、CAN端口等。 在此层接收的数据被发送到models层,用户的输入也通过此层发送到驱动器。
那么,这一层的类是在那里实例化的吗? 我也同样决定选bridge类。 这样,bridge类其实是没有任何业务功能的类。 只是提供了可以在各级之间相互连接的载体。
3、下层与GUI层的沟通
现在,除了我们的GUI层之外的类(通信和模块)都可以在bridge类中通过信号槽机制进行通信了。 那么,我们的模型如何与GUI通信?
可以在这个bridge类中完成。 其他类已在bridge类中实例化,因此可以在此类中包含对类的引用。 您可以将指向bridge类的指针传递到q构件的构造函数。 这将允许所有类与GUI进行通信。
4、运行结构
在设计了所有级别的代码并知道该级别将在该类中实现后,使用线程愉快地运行整个软件。 这就是我们想说的运营架构。
一般来说,所有communication的类都是单独的一个线程。 这样可以在不阻塞GUI线程的情况下快速响应信息收集和控制信息向下级计算机的传递。
所以communication这个层一般有几个端口就有几个线程。 当然,一些轻量级的东西可以组合成一个线程。
bridge类已到达GUI线程。 为什么要做这种事呢? 当我们的界面弹出时,界面会显示从模型到获取的最新值。 (可以通过信号槽进行安装,但会变得复杂。 )因此,要调用get的方法,最好将所有模型放入一个线程中,使其成为——-GUI线程。
这样,我们的小信息收集和控制系统的大型机就构建起来了。
最后,我想强调的是,使用线程时建议使用movetothread方法。 如果不使用此方法,则所有实例都必须由线程的run )函数new,以确保此类的插槽函数在此线程的消息吉鲁组中执行。
—————-
作者: amwha
来源: CSDN
原文: 3359 blog.csdn.net/am wha/article/details/73928281
声明:本文为博主原创文章。 转载请附上博文链接!
极速赛车买前5名的方法件的构造函数。 这将允许所有类与GUI进行通信。
4、运行结构
在设计了所有级别的代码并知道该级别将在该类中实现后,使用线程愉快地运行整个软件。 这就是我们想说的运营架构。
一般来说,所有communication的类都是单独的一个线程。 这样可以在不阻塞GUI线程的情况下快速响应信息收集和控制信息向下级计算机的传递。
所以communication这个层一般有几个端口就有几个线程。 当然,一些轻量级的东西可以组合成一个线程。
bridge类已到达GUI线程。 为什么要做这种事呢? 当我们的界面弹出时,界面会显示从模型到获取的最新值。 (可以通过信号槽进行安装,但会变得复杂。 )因此,要调用get的方法,最好将所有模型放入一个线程中,使其成为——-GUI线程。
这样,我们的小信息收集和控制系统的大型机就构建起来了。
最后,我想强调的是,使用线程时建议使用movetothread方法。 如果不使用此方法,则所有实例都必须由线程的run )函数new,以确保此类的插槽函数在此线程的消息吉鲁组中执行。
—————-
作者: amwha
来源: CSDN
原文: 3359 blog.csdn.net/am wha/article/details/73928281
声明:本文为博主原创文章。 转载请附上博文链接!