QT写串口

QT写串口:

在QT中创建工程,在这里就不叙述了...

软件思路:

1.配置

2.完成接收

3.完成发送

串口的功能也就是这些了....

一.包含头文件

需要包含的重要文件,就是QSerialPort-----------#include <QSerialPort>

添加头文件后会提示错误............................这时可以点击帮助,F1,查看QSerialPort文档中内容,显示需要在PRO文件中添加

qmake:
QT += serialport

 

 

 .....这时就包含头文件成功了....

1接下来,我们进行UI设置...就是拖出来一些控件就可以了...

举例说:     以后可以好好规划下框架...这里能传输数据即可...

 

 

 2.写操作代码

h中

 

 

 在.c中

函数运行:system_init();

完成void ststem_init(void)

 

 

 这样其实就可以接收了....

我们为了用户更加的方便读写.

所以和UI关联

设置一些槽函数

.h中的槽函数定义

 

 

 .c中完成槽函数与连接

    connect(&Serial,&QSerialPort::readyRead,this,&USART::receive_data);
  connect(触发者,发信号,在哪里触发,槽函数);

 

 

 

 

 

 

 

 

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

//接收数据槽函数
void USART::receive_data()
{
// 接收数据
QByteArray receive_info = Serial.readAll();//获取串口读取的数据
qDebug()<<receive_info;
if (ui->checkBox_receive->checkState() == Qt::Checked)//是否勾选转换16进制
ui->textEdit_receive->insertPlainText(receive_info.toHex().toUpper().append(" "));
else
ui->textEdit_receive->insertPlainText(receive_info);

}


/******SEND***********/
void USART::on_Button_Send_clicked(bool checked)
{

checked = 0;
QString send_info = ui->textEdit_SEND->toPlainText();//获取发送框中的数据

if (ui->checkBox_Send->checkState() == Qt::Checked)//是否勾选转换16进制
{
Serial.write(send_info.toUtf8().toHex());
qDebug()<<send_info;
}else
Serial.write(send_info.toUtf8());
}


/**********close*********/
void USART::on_Button_CLOSE_clicked()
{
// 关闭串口
Serial.clear();//清除串口
Serial.close();//关闭串口
disconnect(&Serial,&QSerialPort::readyRead,this,&USART::receive_data);//这里需要注意将之前打开串口发送的信号断掉。
ui->Button_OPEN->setEnabled(true);
ui->Button_CLOSE->setEnabled(false);
}


/*************open******/
void USART::on_Button_OPEN_clicked()
{
// 打开串口、设置波特率、停止位、校验位(打开串口按钮的槽函数中完成)
QString Com_Name = ui->comboBox_COM->currentText();//获取Combox当前Text,就是串口名COM1等。
Serial.setPortName(Com_Name);
if(!Serial.open(QIODevice::ReadWrite)){
QMessageBox::warning(this,"error","SP not open");

}

//设置波特率
int Baud = ui->comboBox_Bandrate->currentText().toInt();
switch (Baud)
{
case 9600:
Serial.setBaudRate(QSerialPort::Baud9600);
break;
case 19200:
Serial.setBaudRate(QSerialPort::Baud19200);
break;
case 115200:
Serial.setBaudRate(QSerialPort::Baud115200);
}
//设置停止位(setStopBits)、校验位(setParity)与设置波特率类似、具体参数详看帮助文档,不过Switch的条件最好用Combox的currentIndex来获取。
//打开串口后我们需要进行给接收区域发送一个信号


connect(&Serial,&QSerialPort::readyRead,this,&USART::receive_data);
ui->Button_OPEN->setEnabled(false);//打开串口按钮置灰
ui->Button_CLOSE->setEnabled(true);//关闭串口按钮置亮

}

void USART::on_Button_Clear_clicked()
{
ui->textEdit_receive->clear();
}

 

posted @ 2021-01-02 23:14  A_Powered  阅读(255)  评论(0编辑  收藏  举报