使用QSerialPort时对串口插拔进行监听
很早就注意到了QSerialPort这个类,Qt自带的串口操作类,比VC使用的文件读写类对串口进行操作方便多了,并且天生支持异步读写,然而,QSerialPort类本身仅提供对某串口进行读写,却不支持对整个系统的串口插拔事件拦截,单单使用QSerialPort并不能有效监听串口插拔从而实时监控自己所需的串口设备是否插入。
带界面的Qt程序可以通过拦截winEvent来区别出硬件事件,从来识别出串口插拔,但是我偏偏需要写一个不带界面的,这个时候,QSerialPortInfo就能派上大用,QSerialPortInfo::availablePorts()能返回系统内所有可用串口,虽然不能做到实时检测,但是只要自己设置一个轮询,就能达到和实时检测差不多的效果。
代码如下:
QList<QSerialPortInfo> list = QSerialPortInfo::availablePorts();
for(int i = 0;i < list.count();i++) {
m_serialPort->setPortName(list.at(i).portName());
//打开串口
if(false == m_serialPort->openReadWrite) {
continue;
}
//设置波特率
m_serialPort->setBaudRateBaud115200;
//设置数据位数
m_serialPort->setDataBitsData8;
//设置奇偶校验
m_serialPort->setParityNoParity;
//设置停止位
m_serialPort->setStopBitsOneStop;
//尝试与打开的串口通信,确认是否是需要的设备
//do things
}