第2天:剖析程序骨架与核心数据流 (约5-6小时)

攻略步骤

  1. 从入口点出发:main 函数

    • 行动:打开 main.cpp 文件。对照笔记中“main函数”部分。
    • 思考:程序启动后第一件事是什么?(创建MainApp对象,启动事件循环)。WIN32宏相关的锁是做什么的?(防止多开)。
    • 行动:在IDE中,通过“转到定义”功能,跳转到 MainApp 类的构造函数。
  2. 精读程序中枢:MainApp 类

    • 行动:打开 mainapp.h 和 mainapp.cpp。对照笔记中“MainApp类”的“数据成员”表格。
    • 核心任务:
      1. 找到那6个模型(SettingsModel*, GraphDataModel*等)的声明和初始化位置。理解是MainApp 创建并拥有这些核心数据模型。
      2. 找到 MainWindow* 成员的初始化。理解是MainApp 创建了主窗口。
    • 行动:在MainApp构造函数中,留意“初始化程序的日志系统”这一步,根据笔记跳转到ScopeLogging类稍作浏览,理解日志是如何被重定向到软件的“诊断”窗口的。
    • 产出:画一个简单的框图。中心是MainApp,它指向6个Model和一个MainWindow。这就是程序的核心数据/状态持有者关系图。
  3. 深入UI与逻辑集大成者:MainWindow 类

    • 行动:打开 mainwindow.h。准备好,这个头文件会很长。对照笔记中“MainWindow类”的“数据成员”表格。
    • 核心任务:
      1. 识别“拥有”关系:MainWindow 持有哪些重要对象的指针?
        • 6个模型的指针(从MainApp那里获取的)。
        • 管理器:ModbusPoll* (轮询调度器)、GraphView* (绘图视图)、GraphDataHandler* (数据处理)。
        • 对话框:ConnectionDialog*, LogDialog*等。
        • UI组件:NotesDock*, Legend*, StatusBar*等。
      2. 理解初始化顺序:浏览MainWindow构造函数(笔记中列出了关键步骤1-21)。注意第7步:“连接ModbusPoll成员的registerDataReady信号到GraphDataHandler成员的handleRegisterData槽”。用笔标出这一行,这是数据流的关键连接点。
    • 产出:更新你的框图。在MainWindow周围,画出它持有的ModbusPoll、GraphView、GraphDataHandler,并用箭头标明MainWindow从MainApp获取了6个模型的引用。
  4. 追踪核心数据流(宏观层面)

    • 行动:不深入代码,仅根据笔记和你的框图,口头描述或写下“从点击开始按钮到图形显示一个数据点”的简化版故事:
      1. 用户在MainWindow的UI上点击“开始”。
      2. MainWindow调用其持有的ModbusPoll对象的startCommunication方法。
      3. ModbusPoll开始工作,通过ModbusMaster与设备通信。
      4. 数据返回后,ModbusPoll发出registerDataReady信号。
      5. 这个信号被GraphDataHandler的handleRegisterData槽函数接收。
      6. GraphDataHandler处理数据后,发出graphDataReady信号。
      7. 这个信号被GraphView的plotResults槽函数接收。
      8. GraphView更新屏幕上的曲线。
    • 关键:理解这是一个信号与槽驱动的异步流程。每个模块各司其职。

今日学习成果

  • ✅ 理解MainApp是程序的启动者和核心模型的创建者。
  • ✅ 理解MainWindow是UI容器和主要业务逻辑的协调者,持有大量功能模块的指针。
  • ✅ 能绘制出展示MainApp、MainWindow、6大模型及ModbusPoll、GraphView等核心模块间静态持有关系的框图。
  • ✅ 能描述数据从采集到显示所经过的主要模块名称和顺序(即上述“故事”)。
  • 自我检验:不看书和笔记,能否在白纸上画出核心关系图?能否向别人解释清楚MainApp和MainWindow的分工?
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐