枚举设备上的串口
QList< QSerialPortInfo> ports = QSerialPortInfo:: availablePorts ( ) ;
for ( int i = 0 ; i < ports. size ( ) ; i++ )
{
for ( int j = i + 1 ; j < ports. size ( ) ; j++ )
{
QString name = ports. at ( i) . portName ( ) ;
int portNumI = name. mid ( 3 ) . toInt ( ) ;
name = ports. at ( j) . portName ( ) ;
int portNumJ = name. mid ( 3 ) . toInt ( ) ;
if ( portNumI > portNumJ)
{
ports. swap ( i, j) ;
}
}
}
for each ( QSerialPortInfo port in ports)
{
ui. comboBox_commportId- > addItem ( port. portName ( ) ) ;
}
打开串口
QSerialPort * m_serial = new QSerialPort;
m_serial- > setPortName ( "COM1" ) ;
m_serial- > setBaudRate ( 9600 ) ;
m_serial- > setDataBits ( QSerialPort:: Data8) ;
m_serial- > setParity ( QSerialPort:: NoParity) ;
m_serial- > setStopBits ( QSerialPort:: OneStop) ;
m_serial- > setFlowControl ( QSerialPort:: NoFlowControl) ;
m_serial- > setReadBufferSize ( 4096 ) ;
if ( m_serial- > open ( QIODevice:: ReadWrite) )
{
}
else
{
int errCode = m_serial- > error ( ) ;
}
发送数据
QByteArray data= ui- > textEdit- > toPlainText ( ) . toLocal8Bit ( ) ;
if ( m_serial- > isOpen ( ) )
{
QDateTime time = QDateTime:: currentDateTime ( ) ;
ui- > textEdit_send- > append ( time. toString ( "yyyy-MM-dd HH:mm:ss:zzz <<" ) + QString:: fromLocal8Bit ( data) ) ;
m_serial- > write ( data) ;
}
接收数据
connect ( m_serial, SIGNAL ( readyRead ( ) ) , this , SLOT ( sls_serialRecvMsg ( ) ) ) ;
void ComNetTool:: sls_serialRecvMsg ( )
{
QDateTime time = QDateTime:: currentDateTime ( ) ;
QByteArray recvBuffer = m_serial- > readAll ( ) ;
if ( ! recvBuffer. isEmpty ( ) )
{
ui- > textEdit_recText- > append ( time. toString ( "yyyy-MM-dd HH:mm:ss:zzz >>" ) + QString:: fromLocal8Bit ( recvBuffer) ) ;
}
}
关闭串口
m_serial- > close ( ) ;
可能遇到的问题
接收中文字符显示乱码
使用QString::fromLocal8Bit()进行转换
void ComNetTool:: sls_serialRecvMsg ( )
{
QByteArray recvBuffer = m_serial- > readAll ( ) ;
if ( ! recvBuffer. isEmpty ( ) )
{
ui- > textEdit_recText- > append ( QString:: fromLocal8Bit ( recvBuffer) ) ;
}
}