A continuación se comienza a introducir el uso de la clase de puerto serie.
En primer lugar, QT5 viene con la clase QSerialPort. Al usarlo, debe agregar una línea en el archivo pro:
QT += serialport
Luego consulte directamente el archivo de encabezado y podrá usarlo.
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
QSerialPort: proporciona acceso a los puertos serie
QSerialPortInfo: Proporciona información sobre los puertos serie que existen en el sistema
A continuación, debe crear un objeto QSerialPort, establecer el nombre del puerto serie, la velocidad en baudios, los bits de datos, los bits de paridad, los bits de parada y otros parámetros, y luego realizar operaciones de lectura y escritura del puerto serie.
Resumió aproximadamente el proceso de ambientación, lectura y escritura.
Los beneficios de este artículo, gratis para recibir el paquete de materiales de aprendizaje de desarrollo Qt, video técnico, que incluye (proyecto de combate real Qt, base del lenguaje C ++, modo de diseño C ++, introducción a la programación Qt, mecanismo de ranura y señal QT, dibujo de imagen de desarrollo de interfaz QT , red QT, programación de base de datos QT, combate de proyecto QT, QSS, OpenCV, módulo rápido, preguntas de entrevista, etc.)
1. Configuración (ejemplo)
QSerialPort *serial = new QSerialPort;
//设置串口名
serial->setPortName(name);
//打开串口
serial->open(QIODevice::ReadWrite);
//设置波特率
serial->setBaudRate(BaudRate);
//设置数据位数
serial->setDataBits(QSerialPort::Data8);
//设置奇偶校验
serial->setParity(QSerialPort::NoParity);
//设置停止位
serial->setStopBits(QSerialPort::OneStop);
//设置流控制
serial->setFlowControl(QSerialPort::NoFlowControl);
Aquí establezca el nombre del puerto serie, abra el puerto serie y configúrelo como de lectura y escritura, la velocidad en baudios es BaudRate, el bit de datos es de 8 bits, no hay bit de paridad, el bit de parada es de 1 bit y hay sin control de flujo. Después de configurarlos, puede realizar operaciones de lectura y escritura. Como novato descubrí que no sabía seleccionar palabras clave en QtCreator, presione F1 para abrir el documento para ver el manual de clases, funciones y otros datos.
2. Leer datos
void MainWindow::Read_Data()
{
QByteArray buf;
buf = serial->readAll();
}
Cuando el puerto serie recibe datos y completa la recepción, enviará una señal readyRead(), por lo que solo necesita escribir una función de ranura Read_Data(), configurar la ranura de la señal y usar readAll() en la función de ranura para leer el datos recibidos en buf.
3. Enviar datos
serial->write(data);
Utilice la función de escritura para enviar los datos de cadena byte a byte.
Solo se necesitan los pasos anteriores para usar el puerto serie, y solo es necesario ejecutarlos después de su uso
serial->close();
Puede cerrar el puerto serie. Usé el diseño de la interfaz ui para escribir la computadora superior, la interfaz es la siguiente:
el código se muestra a continuación:
//mianwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_clearButton_clicked();
void on_sendButton_clicked();
void on_openButton_clicked();
void Read_Data();
private:
Ui::MainWindow *ui;
QSerialPort *serial;
};
#endif // MAINWINDOW_H
//mainwindow.c
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//查找可用的串口
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
QSerialPort serial;
serial.setPort(info);
if(serial.open(QIODevice::ReadWrite))
{
ui->PortBox->addItem(serial.portName());
serial.close();
}
}
//设置波特率下拉菜单默认显示第三项
ui->BaudBox->setCurrentIndex(3);
//关闭发送按钮的使能
ui->sendButton->setEnabled(false);
qDebug() << tr("界面设定成功!");
}
MainWindow::~MainWindow()
{
delete ui;
}
//清空接受窗口
void MainWindow::on_clearButton_clicked()
{
ui->textEdit->clear();
}
//发送数据
void MainWindow::on_sendButton_clicked()
{
serial->write(ui->textEdit_2->toPlainText().toLatin1());
}
//读取接收到的数据
void MainWindow::Read_Data()
{
QByteArray buf;
buf = serial->readAll();
if(!buf.isEmpty())
{
QString str = ui->textEdit->toPlainText();
str+=tr(buf);
ui->textEdit->clear();
ui->textEdit->append(str);
}
buf.clear();
}
void MainWindow::on_openButton_clicked()
{
if(ui->openButton->text()==tr("打开串口"))
{
serial = new QSerialPort;
//设置串口名
serial->setPortName(ui->PortBox->currentText());
//打开串口
serial->open(QIODevice::ReadWrite);
//设置波特率
serial->setBaudRate(ui->BaudBox->currentText().toInt());
//设置数据位数
switch(ui->BitNumBox->currentIndex())
{
case 8: serial->setDataBits(QSerialPort::Data8); break;
default: break;
}
//设置奇偶校验
switch(ui->ParityBox->currentIndex())
{
case 0: serial->setParity(QSerialPort::NoParity); break;
default: break;
}
//设置停止位
switch(ui->StopBox->currentIndex())
{
case 1: serial->setStopBits(QSerialPort::OneStop); break;
case 2: serial->setStopBits(QSerialPort::TwoStop); break;
default: break;
}
//设置流控制
serial->setFlowControl(QSerialPort::NoFlowControl);
//关闭设置菜单使能
ui->PortBox->setEnabled(false);
ui->BaudBox->setEnabled(false);
ui->BitNumBox->setEnabled(false);
ui->ParityBox->setEnabled(false);
ui->StopBox->setEnabled(false);
ui->openButton->setText(tr("关闭串口"));
ui->sendButton->setEnabled(true);
//连接信号槽
QObject::connect(serial, &QSerialPort::readyRead, this, &MainWindow::Read_Data);
}
else
{
//关闭串口
serial->clear();
serial->close();
serial->deleteLater();
//恢复设置使能
ui->PortBox->setEnabled(true);
ui->BaudBox->setEnabled(true);
ui->BitNumBox->setEnabled(true);
ui->ParityBox->setEnabled(true);
ui->StopBox->setEnabled(true);
ui->openButton->setText(tr("打开串口"));
ui->sendButton->setEnabled(false);
}
}
//main.c
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Los beneficios de este artículo, gratis para recibir el paquete de materiales de aprendizaje de desarrollo Qt, video técnico, que incluye (proyecto de combate real Qt, base del lenguaje C ++, modo de diseño C ++, introducción a la programación Qt, mecanismo de ranura y señal QT, dibujo de imagen de desarrollo de interfaz QT , red QT, programación de base de datos QT, combate de proyecto QT, QSS, OpenCV, módulo rápido, preguntas de entrevista, etc.)