
Qt CAN通信调试工具源代码:支持多品牌CAN卡,带自动折叠、自动保存及多线程接收
功能

(假装这里有张清爽的蓝白配色工具界面截图,左侧设备参数配置区,中间报文收发区,右侧折叠ID
树形列表)
这个自研的CAN调试工具在车间测试时被同事戏称为"瑞士军刀",核心就三点:**不卡界面、上手无
脑、功能实在**。咱们直接扒代码看门道。
---
### 多线程接收:不卡界面才是王道
主线程收CAN数据?一秒钟几千帧直接让界面冻成PPT。这里直接上`QCanReceiver`线程类:
```cpp
void QCanReceiver::run() {
while (!isInterruptionRequested()) {
if (CAN_Receive(g_devHandle, g_channel, &canFrame, 1) == 1) { // 非阻塞接收
emit newFrameReceived(canFrame); // 发射信号不要用Qt::BlockingQueuedConn
ection!
msleep(1); // 防止CPU吃满
}
}
}
```
注意点藏在细节里:
1. 信号传递用默认的`Qt::AutoConnection`,接收端用队列方式处理
2. `msleep(1)`看似多余,实测防止某些CAN卡库的诡异抽风
3. 退出时先`requestInterruption()`再`quit()`,比粗暴terminate安全得多
---
### 折叠显示:强迫症患者的福音
当ID=0x123的帧每秒刷屏500次时,折叠功能让界面清爽度立涨300%:
```cpp