QT creator实现串口通信操作方法
虚拟串口软件模拟了两个串口,并且互相连通的,就是从com7发送的数据,com8可用接收,反过来也一样。
软件使用com7,串口调试工具使用com8,就可以测试软件的运行情况
安装虚拟串口软件:
pro文件添加:
QT+=serialport
构造函数里面初始化端口:
MainWindow_Serial_Port::MainWindow_Serial_Port(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow_Serial_Port)
{
ui->setupUi(this);
ui->comboBox_Port->addItem("COM7");
ui->comboBox_Port->addItem("COM8");
q_serial_port=new QSerialPort();
}
打开串口
q_serial_port->setPortName(ui->comboBox_Port->currentText());
//打开串口
if(!q_serial_port->isOpen())
{
if(!q_serial_port->open(QIODevice::ReadWrite))
{
QMessageBox::information(this,"error","串口打开失败");
return;
}
else
{
AddLogInfo("打开串口成功");
}
}
else
{
AddLogInfo("串口已经打开");
}
串口的配置
q_serial_port->setBaudRate(int_BaudRate);
// q_serial_port->setBaudRate(QSerialPort::Baud9600);
//设置数据位数(8位)
q_serial_port->setDataBits(QSerialPort::Data8);
//设置奇偶校验(没有)
q_serial_port->setParity(QSerialPort::NoParity);
//设置停止位 (1)
q_serial_port->setStopBits(QSerialPort::OneStop);
//设置流控制(没有)
q_serial_port->setFlowControl(QSerialPort::NoFlowControl);
//绑定读数据slot
QObject::connect(q_serial_port, SIGNAL(readyRead()), this, SLOT(ready_read_data()));
发送数据:
void MainWindow_Serial_Port::on_pushButton_send_data_clicked()
{
if(q_serial_port->isOpen())
{
ready_write_data(ui->lineEdit_send_data->text());
AddLogInfo("发送:"+ui->lineEdit_send_data->text());
}
else
{
// ui->textEdit_recv_data->append("串口没有打开");
AddLogInfo("串口没有打开");
}
}
接收数据:
//读取串口信息
void MainWindow_Serial_Port::ready_read_data()
{
quint8 i=0;
quint8 arrDLT645Frame[12] = {0x68, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x68, 0x13, 0x00, 0xDF, 0x16};
QByteArray baDLT645Frame;
for (; i<12 ;i++)
{
baDLT645Frame.append(arrDLT645Frame[i]);
}
//QByteArray baDLT645FrameToHex = baDLT645Frame.toHex();
//std::string baDLT645FrameToStdString = baDLT645FrameToHex.toStdString();
//QString strDLT645Framer = QString::fromStdString(baDLT645FrameToStdString);
//ui->DispBTextEdit->setText(strDLT645Framer);
QByteArray data;
data = q_serial_port->readAll();
// std::string string_data = data.toStdString();
//std::string string_data = data.tolocal8();
// QString qarrayToStr = QString::fromStdString(string_data); //无法显示中文
QString qarrayToStr = QString::fromLocal8Bit(data);//可以显示中文
// QMessageBox::information(this,"接收信息", qarrayToStr);
//ui->textEdit_recv_data->append(qarrayToStr);
AddLogInfo("接收:"+qarrayToStr);
}
QByteArray data;
QString qarrayToStr = QString::fromLocal8Bit(data);//可以显示中文,字节转字符串
QString write_content=""; QByteArray send_data=write_content.toLocal8Bit(); //字符串转换中文显示,字符串转字节
工程源码更新: