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(); //字符串转换中文显示,字符串转字节
工程源码更新: