修改.pro文件
添加如下所示代码
QT += serialport
编写.h文件
1、添加头文件
#include <QtSerialPort>
2、添加串口定义
QSerialPort *serialPort;
源文件代码
1、 添加头文件
#include <QSerialPort>
#include <QSerialPortInfo>
2、搜索串口
void MainWindow::on_btn_find_seriaport_clicked()
{
const auto infos = QSerialPortInfo::availablePorts();
ui->cbx_com_name->clear();
for(const QSerialPortInfo &info : infos)
{
QSerialPort serial;
serial.setPort(info);
if(serial.open(QIODevice::ReadWrite))
{
ui->cbx_com_name->addItem(info.portName());
serial.close();
}
}
}
3、 打开串口
void MainWindow::on_btn_open_port_clicked()
{
if (ui->btn_open_port->text() == tr("打开串口"))
{
serialPort = new QSerialPort;
serialPort->setPortName(ui->cbx_com_name->currentText());
if(serialPort->open(QIODevice::ReadWrite))
{
serialPort->setBaudRate(ui->cbx_bandrate->currentText().toInt());
serialPort->setStopBits(to_convert_stopbit(ui->cbx_stopbit->currentText()));
serialPort->setDataBits(to_convert_databit(ui->cbx_databit->currentText()));
serialPort->setParity(to_convert_paritybit(ui->cbx_paritybit->currentText()));
ui->btn_open_port->setText(tr("关闭串口"));
ui->cbx_bandrate->setEnabled(false);
ui->cbx_stopbit->setEnabled(false);
ui->cbx_databit->setEnabled(false);
ui->cbx_paritybit->setEnabled(false);
ui->cbx_com_name->setEnabled(false);
ui->btn_find_seriaport->setEnabled(false);
connect(serialPort, &QSerialPort::readyRead, this, &MainWindow::ReadData);
}
else
{
QMessageBox::critical(this, tr("Error"), serialPort->errorString());
}
}
else
{
serialPort->clear();
serialPort->close();
serialPort->deleteLater();
ui->btn_open_port->setText(tr("打开串口"));
ui->cbx_bandrate->setEnabled(true);
ui->cbx_stopbit->setEnabled(true);
ui->cbx_databit->setEnabled(true);
ui->cbx_paritybit->setEnabled(true);
ui->cbx_com_name->setEnabled(true);
ui->btn_find_seriaport->setEnabled(true);
}
}
4、发送数据
void MainWindow::on_btn_send_message_clicked()
{
serialPort->write(ui->tex_send_text->toPlainText().toLocal8Bit());
}
5、接收数据
void MainWindow::ReadData()
{
static int reNum = 0;
QByteArray buf;
buf = serialPort->readAll();
if (!buf.isEmpty())
{
reNum += buf.size();
QString myStrTemp = QString::fromLocal8Bit(buf); //支持中文显示
QString str = ui->tex_recv_text->toPlainText();
str +=myStrTemp;
ui->tex_recv_text->clear();
ui->tex_recv_text->append(str);
}
buf.clear();
}
6、数据位,校验位,停止位转换代码
QSerialPort::StopBits MainWindow::to_convert_stopbit(QString bit)
{
if(bit == tr("1"))
return QSerialPort::OneStop;
else if (bit == tr("1.5"))
return QSerialPort::OneAndHalfStop;
else if (bit == tr("2"))
return QSerialPort::TwoStop;
return QSerialPort::OneStop;
}
QSerialPort::DataBits MainWindow::to_convert_databit(QString bit)
{
if(bit == tr("8"))
return QSerialPort::Data8;
if(bit == tr("7"))
return QSerialPort::Data7;
if(bit == tr("6"))
return QSerialPort::Data6;
if(bit == tr("5"))
return QSerialPort::Data5;
return QSerialPort::Data8;
}
QSerialPort::Parity MainWindow::to_convert_paritybit(QString bit)
{
if(bit == tr("None"))
return QSerialPort::NoParity;
if(bit == tr("Odd"))
return QSerialPort::OddParity;
if(bit == tr("Even"))
return QSerialPort::EvenParity;
return QSerialPort::NoParity;
}
DEMO:https://gitee.com/zyzp/QT-SerialPort
如果这篇文章对您很有帮助,不妨
----- 本文结束 ❤ 感谢您的阅读 ----
下一篇
Linux 安装CH340驱动
- 本文作者: Memory
- 本文链接: https://www.mzpkz.top/post/2019-06-19/
- 版权声明: 本博客所有文章除特别声明外,转载请注明出处!