1、引子

Qt,在很多人的认识里是一个做界面的框架,只用来做界面,而后端往往是用别的来实现。在本人的实践中, 我把界面与后端的实现都用Qt来实现了。

2、软件分层

一般来说,我们的软件架构会很成很多层,这里我们分三层就够 了,分层如下图所示:

2.1 GUI层

这里我们由于基于Qt的,所以这一层都是用Qt的类库来实现了,所有的主界面都会从这三个类:QWiget,QMainWindow,QDialog中的一个继承而来,并在main函数里生成实例并show出来,进入主消息循环。我本人习惯于使用QWiget,不使用UI文件,所有的界面都new出来,再使用代码来布局。

2.2 Models层

model层主要实现我们的软件的业务逻辑,这里的模块因整个软件的业务逻辑来合理划分模块,达到高内聚松耦合的效果。在这里我们就涉及到一个这些业务逻辑类,在那里new出来的问题了。我的做法是:做一个bridge类,让所有的业务逻辑类都在这个bridge类里实例化。

2.3 Communication 层

这一层的话就是实现对数据的采集了,通信 的方式 有多种多样,有串口,有网口,有CAN口等。这一层收到的数据向models层发,用户的输入也通过这一层向执行机构发。

那么这一层的类,在那里实例化呢?我同样选择在bridge类里,这样,bridge类其实是一个什么业务功能都没有的类,只是提供了各个类之间可以相互connect(信号槽)的载体。

3、 下层与GUI层的沟通

至此,我们的除GUI层的类(通信与模块)都在bridge类里能通过信号槽的机制沟通起来了。那么我们的的模型怎么和GUI进行通信呢?

我们可以通过这个bridge类来进行,因为我们的其它 的类都是在bridge类里进行实例化的,所以这个类里可以拥有类的引用,我们可以在QWidget里的构造函数里传一个bridge类的指针进去,这样,我们的所有类,都可以和GUI进行通信了。

4、运行架构

当我们把所有的层次的代码都设计好了,并且知道在那个类里,那个层级来实现后,我们要使用线程让整个软件欢快的运行进来 。这就是我们要说的运行架构。

一般而言,我们把所有的communication的类都 会单独出来成为一个线程,这样,不会阻塞GUI线程,也能够更快的响应采集信息和向下位机传递控制信息。

所以communication这一层,一般有几个端口就会有几个线程。当然有些比较轻量级的可以合在一个线程里。

bridge类收到GUI线程里,为什么要这么做呢,我们界面弹出来时,要从model里get最新的值显示在界面上,(用信号槽实现也可以但是会显得比较繁琐),所以要调用get的方法,有这样的需求, 我们最好把所有的model都放到一个线程里——-即GUI线程。

这样我们的一个小型的信息采集与控制系统的主框架就搭建好了。

最后强调一点的是:当使用线程时建议使用movetothread的方法。如果不使用这个方法的话,所有的实例都必须在线程的run()函数里new出来,才能保证这个类的槽函数在这个线程的消息循环里执行。
--------------------- 
作者:amwha 
来源:CSDN 
原文:https://blog.csdn.net/amwha/article/details/73928281 
版权声明:本文为博主原创文章,转载请附上博文链接!

基于Qt软件框架设计相关推荐

  1. 软件框架设计的艺术----读书总结

    总结 软件开发的艺术 理想主义,经验主义和无绪 文艺复兴时期,现代科学产生了两个重量级理论: 理性主义和经验主义. 理性主义认为理智是信息的首要来源.给出一个假设,只要通过思考就能理解和描述这个世界, ...

  2. linux下qt制作日历,基于QT的多功能日历设计与开发.doc

    基于QT的多功能日历设计与开发 上海电力学院 本科毕业设计(论文) 题 目: 基于QT的多功能日历 设计与开发 院 系: 计算机与信息工程学院 专业年级: 2007电子科学与技术 学生姓名: 张岚 学 ...

  3. 从无到有的基于QT软件的DIY桌面番茄钟(上)

    基于QT软件的DIY桌面番茄钟-上篇 前言 参考本教程(上篇)可实现的功能: 实现细节: Day 1: 需求导图: QT的安装: Day 2: 创建项目: 构建无边框界面(后续可添加缩放功能,未添加) ...

  4. 使用Qt动画框架设计角色的二维动画(二)

    使用Qt动画框架设计角色的二维动画(二) 接上次的 日志. 上次发布demo虽然使用了大量的动画框架.有限状态机框架,但是仍有瑕疵.比如说在用户一直按下按键的时候角色会被"冻"住, ...

  5. 使用Qt动画框架设计角色的二维动画

    使用Qt动画框架设计角色的二维动画 Qt的动画框架是Qt4.6新添加的一个重要的特性,有了它,开发人员可以制作激动人心的动画界面,而不必局限于单调的固定窗口了,可以说,Qt动画框架是其它界面库少见的功 ...

  6. 基于Qt的软件框架设计

    1.引子 Qt,在很多人的认识里是一个做界面的框架,只用来做界面,而后端往往是用别的来实现.在本人的实践中, 我把界面与后端的实现都用Qt来实现了. 2.软件分层 一般来说,我们的软件架构会很成很多层 ...

  7. 画出android音乐播放器的类图,基于Qt图形框架音乐播放器的设计与实现

    随着互联网软件行业的快速发展,应用市场的软件种类更是琳琅满目,其中,生活娱乐类的软件种类最为繁多,就以本文涉及到的音乐播放器(多媒体)来说,国内目前的主流音乐播放器有QQ音乐.酷狗音乐.百度音乐.网易 ...

  8. Netra基于Rdk平台的软件框架设计

    ==================================================================================================== ...

  9. Netra(DM8168)基于Rdk平台的软件框架设计

    感谢原作者robin19890305的经验分享. =========================================================================== ...

  10. 仅仅是又多了一本设计书吗 《软件框架设计的艺术》序

    读者也许会想:"在程序开发领域中,讲述软件设计的技术图书是不是太多 了?",的确如此,因而你有理由来质疑,为什么我还要写一本这样的书而你又凭什么还要再读这样一本书?说起软件设计的经 ...

最新文章

  1. sql语句没错 mysql.data.dll类型的异常_未处理的“System.Data.SqlClient.SqlException”类型的异常出现在 system.data.dll 中。...
  2. plsql 循环存储过程返回数据集合_Java基础(十五)——Collection集合、泛型 - 寒江雨
  3. 基于小波和插值的超分辨率图像重建算法
  4. 使用python3 解析html对称标签
  5. nginx 如何实现读写限流的方法
  6. 读《中台架构与实现》
  7. Spring Cloud CLI简介
  8. 个人收集的一些库、工具、技术介绍
  9. 前端为什么要工程化?
  10. IEC_60068-2-64基本环境试验规程第2-64部分试验试验Fh振动、宽带随机抽样
  11. 基于JAVA的超市管理系统计算机毕业论文
  12. Grub2引导进入DOS系统
  13. 学习!嵌入式底层驱动工程师学习方法
  14. 减持奈飞增持京东健康,“贝莱德们”为何开始偏爱中国企业?
  15. 7的整除特征 三位一截_小学数学竞赛七、数的整除特征(一)
  16. html引用css文件无效,关于html引用文件无效。
  17. Appium(Python)测试混血App
  18. AppleWatch 开发的一些知识总结
  19. Linux下网络相关结构体 struct servent
  20. 为Nextcloud中的视频文件配置缩略图

热门文章

  1. ubuntu 910 下安装万能五笔
  2. 在xp系统上安装java8
  3. 数据可视化实战案例分享
  4. 机器学习方法的基本分类
  5. moea切比雪夫_基于分解的多目标进化优化MOEA/D之切比雪夫方法代码
  6. coverity分析端软件环境搭建
  7. chrome内核 用h5调用高拍仪(摄像图)实现拍证件照
  8. 利用微信JSSDK实现自动定位
  9. 手把手教你关闭iphone系统自动下载(新增IOS11描述性文件地址)
  10. 联想开机壁纸存放位置