当前位置:网站首页>QT simple serial port assistant
QT simple serial port assistant
2022-07-21 12:41:00 【Yinzz2】
Function realization :
1. Realize serial communication with MCU
2. Automatically find serial port number
The case shows :
.Pro file
QT += core gui serialport
.UI file
1 individual TextEdit Control 1 individual LineEdit 5 individual Combobox Control 2 individual Qlabel Control 3 individual PushButton Control
Dialog.h
#include <QList>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
public:
bool SetSerialPortConfig(void);
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_LineEdit2_readyRead();
void on_pushButton_3_clicked();
private:
Ui::Dialog *ui;
bool m_isopen;
QSerialPort m_serialPort;
};
#endif // DIALOG_H
Dialog.cpp( The code has comments )
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
m_isopen = false;
ui->textEdit->setReadOnly(true);
ui->pushButton_2->setEnabled(m_isopen);
// Find port
QList<QSerialPortInfo> serialPortInfo = QSerialPortInfo::availablePorts();
for(int i =0;i<serialPortInfo.count();i++)
{
ui->comboBox->addItem(serialPortInfo.at(i).portName());
}
// Receive SCM slot function
connect(&m_serialPort,SIGNAL(readyRead()),this,SLOT(on_LineEdit2_readyRead()));
}
Dialog::~Dialog()
{
delete ui;
}
// Set the serial port configuration
bool Dialog::SetSerialPortConfig(void)
{
m_serialPort.setPortName(ui->comboBox->currentText());// Set port
m_serialPort.setBaudRate(ui->comboBox_2->currentText().toInt());// set baud rate
// Set check bit
if(ui->comboBox_3->currentText() == "None"){
m_serialPort.setParity(QSerialPort::NoParity);
}
else if(ui->comboBox_3->currentText() == "Odd"){
m_serialPort.setParity(QSerialPort::OddParity);
}
else{
m_serialPort.setParity(QSerialPort::EvenParity);
}
// set data bit
if(ui->comboBox_4->currentText() == "8"){
m_serialPort.setDataBits(QSerialPort::Data8);
}
else if(ui->comboBox_4->currentText() == "7"){
m_serialPort.setDataBits(QSerialPort::Data7);
}
else if(ui->comboBox_4->currentText() == "6"){
m_serialPort.setDataBits(QSerialPort::Data6);
}
else{
m_serialPort.setDataBits(QSerialPort::Data5);
}
// Set stop bit
if(ui->comboBox_5->currentText() =="1"){
m_serialPort.setStopBits(QSerialPort::OneStop);
}
else if(ui->comboBox_5->currentText() =="1.5"){
m_serialPort.setStopBits(QSerialPort::OneAndHalfStop);
}
else{
m_serialPort.setStopBits(QSerialPort::TwoStop);
}
m_serialPort.setFlowControl(QSerialPort::NoFlowControl);
return m_serialPort.open(QSerialPort::ReadWrite);
}
void Dialog::on_pushButton_clicked()
{
if(m_isopen == true)
{
m_serialPort.close();
ui->pushButton->setText(" Open the port ");
m_isopen = false;
ui->pushButton_2->setEnabled(false);
ui->comboBox->setEnabled(true);
ui->comboBox_2->setEnabled(true);
ui->comboBox_3->setEnabled(true);
ui->comboBox_4->setEnabled(true);
ui->comboBox_5->setEnabled(true);
}
else
{
if(true == SetSerialPortConfig() )
{
ui->pushButton->setText(" Close the port ");
m_isopen = true;
ui->pushButton_2->setEnabled(true);
// Check whether the information is correct
qDebug()<<" Successful reception "<<m_serialPort.portName()<<m_serialPort.baudRate()
<<m_serialPort.parity()<<m_serialPort.dataBits()<<m_serialPort.stopBits();
ui->comboBox->setEnabled(false);
ui->comboBox_2->setEnabled(false);
ui->comboBox_3->setEnabled(false);
ui->comboBox_4->setEnabled(false);
ui->comboBox_5->setEnabled(false);
}
}
}
// Send slot function
void Dialog::on_pushButton_2_clicked()
{
if(m_isopen == true){
m_serialPort.write(ui->lineEdit_2->text().toStdString().c_str());
}
}
// Receive slot function
void Dialog::on_LineEdit2_readyRead()
{
if(m_isopen == true){
ui->textEdit->insertPlainText(QString(m_serialPort.readAll()));
}
}
// Clear the receiving end information
void Dialog::on_pushButton_3_clicked()
{
ui->textEdit->clear();
}
边栏推荐
猜你喜欢
随机推荐
In 2022, prepare for the golden nine silver ten, Android from infrastructure to architecture advanced all-round interview question analysis (including the answer and source code)
Leetcode 226. 翻转二叉树
POJ2308连连看dfs+bfs+优化
传感器实验——485空气温湿度
Orepa: Ali proposed a heavy parameter strategy with fast training. The memory is halved and the speed is doubled | CVPR 2022
The meaning of null in C language
IM即时通讯开发千万级并发长连接网关技术
从云原生到智能化,深度解读行业首个「视频直播技术最佳实践图谱」
接口测试常用工具及测试方法(零基础篇)
Learning notes of linear regression model (1)
浅拷贝 深拷贝
Nerf dataset
Introduction to informatization
让软件开发民主化的低代码
How many identical characters are there in the MySQL query string (the query string contains a specific number of identical characters)
Introduction to MySQL (a)
Record a tortuous record of taking the target
华为暑期实习 通用软件开发 面经
go mod安装报错的解决方案
使用Unity Tilemap轻松制作2D瓦片地图-基础篇