初学QT,想实现串口收发,但是只能发,不能收(断点不进接收槽函数),各位帮忙指点一下,谢谢。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QSerialPort" //串口访问
#include "QSerialPortInfo" //串口端口信息访问
#include "QMessageBox"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
// turn on uart"COM40"
serial = new QSerialPort;
serial->setPortName("COM40");
if(serial->open(QIODevice::ReadWrite))
{
// 设置波特率
serial->setBaudRate(115200);
// 设置数据位数
serial->setDataBits(QSerialPort::Data8);
// 设置校验位
serial->setParity(QSerialPort::NoParity);
// 设置流控制
serial->setFlowControl(QSerialPort::NoFlowControl);
// 设置停止位
serial->setStopBits(QSerialPort::OneStop);
//连接信号槽
connect(serial,SIGNAL(readyRead),this,SLOT(MainWindow::serial_read()));
//connect(SerialPort,SIGNAL(QSerialPort::readyRead()),this,SLOT(MainWindow::serial_read()));
}
//打开串口
else
{
QMessageBox::about(NULL, "提示", "串口COM40无法打开\r\n不存在或已被占用");
return;
}
}
void MainWindow::serial_read()
{
QString buffer_1;
int a = 0;
//从缓冲区中读取数据
QByteArray buffer = serial->readAll();
if(!buffer.isEmpty())//如果非空说明有数据接收
{
//转换成16进制大写
QString str=buffer.toHex().data();
str=str.toUpper();
//一个16进制占4位,8位为一字节,所以每两位16进制空一格
for(int i=0;i
{
QString str_1 = str.mid (i,2);
buffer_1 += str_1;
buffer_1 += " ";
}
//读取之前显示数据
QString receive = ui->textEdit->toPlainText();
//清空显示
ui->textEdit->clear();
//重新显示
if(a==0){
receive += QString(buffer);
ui->textEdit->append(receive);
}//直接显示
else {
receive += QString(buffer_1);
ui->textEdit->append(receive);
}//16进制显示
}
buffer.clear();
}
void MainWindow::on_pushButton_2_clicked()
{
serial->write("aa");
}