枚举设备上的串口
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));
}
}