QT下的串口编程

QT下的串口编程

对串口进行读和写。编程实例:写一个自己的串口助手。

1.创建工程

 依旧是选择qt widget application,然后再配置好相关操作,基类选择QWidget。创建后马上编译一下,验证一下初始工程没有问题。

2. 做好相关的UI界面

- 做一个文本接收界面,Plain Text Edit。
- 作一些相关的属性选择下拉框(诸如串口号,波特率,校验位等),使用Combo Box。双击控件就可以编辑相关的下拉选项。
- 做一个发送框,使用Line Edit,注意设置为readOnly。
- 做一些按钮,使用Push Button。
- 做一个控件箱子,就是可以存放多个控件的小包。使用Group Box。

3. 调用serialport相关内容,做好串口端口号的检查并列出到UI。

在widget的建构函数中,设置串口相关内容。

#include<QSerialPortInfo>
widget::widget():QWidget(parent),ui(new Ui::Widget)
{
	QStringList serialNamePort;
	foreach(const QSerialPortInfo &inf0 ,QSerialPortInfo::availablePorts())
	{
		serialNamePort<<info0.portName();
	}
	//当前ui的serialCb对象(ComboBox类的对象),调用它的addItems()方法
	//效果就是把字符串list中的字符串组,依次制作成下拉框的选项。
	ui->serialCb->addItems(serialNamePort);
}

4.调用serialport相关内容,完成相关的逻辑功能

//记得包含头文件
#include<QSerialPortInfo>
//设置好当前窗口的建构函数
widget::widget():QWidget(parent),ui(new Ui::Widget)
{
	ui->setupUi(this);
	QStringList serialNamePort;
	
	serialPort=new QserialPort(this);

	foreach(const QSerialPortInfo &inf0 ,QSerialPortInfo::availablePorts())
	{
		serialNamePort<<info0.portName();
	}
	//当前ui的serialCb对象(ComboBox类的对象),调用它的addItems()方法
	//效果就是把字符串list中的字符串组,依次制作成下拉框的选项。
	ui->serialCb->addItems(serialNamePort);
}

//设置一个按键信号的槽函数(就是按下按键后,关联的槽函数根据相关的属性设置,设置好串口属性)
//可以在帮助界面查阅串口类QSerialPort的各种属性、方法。
//不妨令槽函数为on_openBt_clicked()
void Widget::on_openBt_clicked()
{
	QSerialPort::BaudRate baudRate;
	QSerialPort::DataBits dataBits;
	QSerialPort::StopBits stopBits;
	QSerialPort::Parity checkBits;
	
	//仅作演示,建议使用map容器,更加方便。可以直接将字符串映射到相应的类的静态成员枚举变量
	if(ui->baudrateCb->currentText()=="4800")
	{
		baudRate=QSerialPort::Baud4800;
	}
	else if(ui->baudrateCb->currentText()=="9600")
	{
		baudRate=QSerialPort::Baud9600;
	}
}

	serialPort->setPortName(ui->serialCb->currentText());
	serialPort->setBaudRate(baudRate);
	serialPort->setDataBits(dataBits);
	serialPort->setStopBits(stopBits);
	serialPort->setParity(checkBits);
	//最后检查串口是否打开成功
	if(serialPort->open(QIODevice::ReadWrite)==true)
	{
		QMessageBox::information(this,"提示","成功");
	}
	else
	{
		QMessageBox::critical(this,"提示","失败");
	}

//关闭串口的槽函数,记得在对应的头文件下的类中声明
void Widget::on_closeBt_clicked()
{
	serialPort->close();//关闭串口
}

//接受到数据,可以读取串口传过来的内容对应的的槽函数,记得在对应的头文件下的类中声明
void serialPortReadyToRead_Slot()
{
	QString buf;
	buf = QString(serialPort->readAll());
	ui->recvEdit->appendPlainText(buf);//recvEdit是Plain Text Edit类的一个对象
}

//发送数据的按键的按下信号的槽函数,记得在对应的头文件下的类中声明
void Widget::on_senBy_clicked()
{
	serialPort->write(ui->sendEdit->text().toLocal8Bit().data());
}

//清空数据的按键的点击信号的槽函数,记得在对应的头文件下的类中声明
void Widget::on_clearBt_clicked()
{
	ui->recvEdit->clear();
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值