QT5有专门的串口类:
QSerialPort:提供访问串口的功能
QSerialPortInfo:提供系统中存在的串口的信息
具体使用方法:
在pro文件中加入: QT += serialport
mainwindow.h中添加头文件及成员:
public:
QSerialPort serial;//串口实例
void initSerialPort();//初始化串口函数
private slots://必须加slots void serialRead();
3.在主窗口添加一个comboBox,一个label,初始化串口
void MainWindow::initSerialPort()
{
connect(&serial,SIGNAL(readyRead()),this,SLOT(serialRead())); //连接槽
//获取计算机上所有串口并添加到comboBox中
QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts(); if(infos.isEmpty()) { ui->comboBox->addItem("无串口"); return; }
foreach (QSerialPortInfo info, infos) { ui->comboBox->addItem(info.portName()); qDebug() << info.portName();
}
}
void MainWindow::on_comboBox_currentIndexChanged(const QString &arg1)
{
QSerialPortInfo info;
QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts(); int i = 0; foreach (info, infos)
{
if(info.portName() == arg1) break; i++;
}
if(i != infos.size ()){//can find ui->lblStatus->setText("串口打开成功");
serial.close();
serial.setPort(info);
serial.open(QIODevice::ReadWrite); //读写打开 //
serial.setBaudRate(QSerialPort::Baud9600); //波特率 //
serial.setDataBits(QSerialPort::Data8); //数据位 //
serial.setParity(QSerialPort::NoParity); //无奇偶校验 // serial.setStopBits(QSerialPort::OneStop); //无停止位 // serial.setFlowControl(QSerialPort::NoFlowControl); //无控制
}else
{
serial.close(); ui->lblStatus->setText("串口打开失败");
}
}
void MainWindow::on_btnSend_clicked()
{
// QByteArray arr = "abcd";
// serial.write(arr);
char dat[] = {0x55,0x01,0x05,0x00,0xAA};
serial.write(dat,5);
}
void MainWindow::serialRead()
{
QByteArray qa = serial.readAll();
// if(qa.at(0)=='a')
ui->textEdit->append(qa);
// str.sprintf("%02x ",(int)qa[i]);//十六进制显示 // QMessageBox::warning (this,tr("提示信息"),tr("串口接收成功"));
}