Qt展示动态波形
- 需求描述
- 成品展示
- 实现难点
- Qt多线程
 
需求描述
- 接入串口,配置串口顺序进行接收数据;
- 数据分成两个串口分别传入,使用多线程并发接入;
- 时域数据有两个通道(I,Q),分别以实时波形展示;
- 频域数据有三个通道(I,Q,C),C表示联合通道,分别展示FFT波形;
- 状态数据列表实时展示;
- 时域可以配置时间窗口大小,也就是展示的波形最大时间段;
- 频域可以配置频域段;
- 数据支持随时保存,并可以打开查看;
成品展示

实现难点
Qt多线程
Qt实现多线程,有两种方式:
- 一种是使用QThread:
- 定义个类,继承QThread;
- 然后重写类的run()方法;
- 在主线程中通过类对象的start()方法启动线程;
- 一种是使用自定义类(任务类),继承QObject:
- 在任务类中定义公共任务方法,实现具体的任务处理逻辑;
- 在主线程中创建QThread对象(千万不要给创建对象指定父对象);
- 通过调用QObject类提供的moveToThread方法,将任务类对象移动到创建的子线程对象QThread中;
- 调用子线程对象的start()方法,子线程开始启动,但是移动到子线程中的对象并没有工作;
- 通过调用自定义类对象的工作函数,让这个函数开始执行,这时候就是在移动到的子线程中执行的。
两种方式的区别:
- 第一种由于run()方法不可以带参数,所以如果要传参数,需要把参数作为成员变量,通过信号槽机制进行传递;第二种没有这种限制,在任务类中定义的任务函数可以带有参数,所以更加灵活;