QT开发之串口通信(四)

VS2015+QtPackage版本1.3.11插件+QT5.13.1

最近使用串口遇到一些问题

1、问题:在上述编译环境下发生数据会出现发送一次数据后无法重复发送数据,返回值也没有问题

查询得知:

QByteArray SendBytes((char*)data, len);
  
    
    int sum = CurrentPort->write(SendBytes);//发生数据
    CurrentPort->waitForBytesWritten();//这个就是一个等待写入完成

同时这个这个问题在将代码迁移到新的系统和编译器后,也出现过类型的问题,也需要将后面这句加上就解决流

2、问题:DirectWrite: CreateFontFaceFromHDC() failed (指示输入文件 (例如字体文件) 中的错误。) for QFontDef(Family="Fixedsys", pointsize=9.75, pixelsize=16, styleHint=5, weight=50, stretch=100, hintingPreference=0) LOGFONT("Fixedsys", lfWidth=0, lfHeight=-16) dpi=192

出现这个问题的原因我查的是,因为发送的数据包含特殊字符,比如一些ASCII码表参数小于32的数据,在低版本的Qt中是存在这个问题的,

解决办法:要么将小于32的特殊字符用其它的代替要么更新版本,或者使用1的方式一样在发生数据的后面增加CurrentPort->waitForBytesWritten();我这边发现也能解决这个问题

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt串口通信是一种可以在Qt平台上进行串口通信的解决方案。其Qt串口通信模块qserialport是实现串口通信的关键模块。本文将为大家介绍Qt串口通信模块qserialport的开发完整实例。 首先,我们需要在Qt打开串口通信模块qserialport。在Qt 5.2及以上版本,qserialport已经被包含在QtCore模块。因此,我们只需要在代码引入QtCore模块即可使用qserialport。 接下来,我们需要定义串口参数。我们可以利用QSerialPort类提供的函数setBaudRate()、setDataBits()、setParity()等来设置参数。例如: ```cpp QSerialPort serial; serial.setBaudRate(QSerialPort::Baud9600); serial.setDataBits(QSerialPort::Data8); serial.setParity(QSerialPort::NoParity); serial.setStopBits(QSerialPort::OneStop); serial.setFlowControl(QSerialPort::NoFlowControl); ``` 然后,我们需要打开串口。我们可以使用QSerialPort类的open()函数来打开串口。例如: ```cpp serial.setPortName("COM1"); // 设置串口号为COM1 if (serial.open(QIODevice::ReadWrite)) { qDebug() << "串口已打开"; } else { qDebug() << "串口打开失败"; } ``` 接下来,我们可以通过QSerialPort类的函数write()和read()来进行数据读写。例如: ```cpp // 向串口写入数据 char buf[] = "hello world"; serial.write(buf, sizeof(buf)); // 从串口读取数据 QByteArray data = serial.readAll(); qDebug() << data; ``` 最后,在程序结束时我们需要关闭串口。我们可以使用QSerialPort类的close()函数来关闭串口。例如: ```cpp serial.close(); ``` 综上所述,以上就是Qt串口通信模块qserialport的开发完整实例。在实际应用,我们可以根据需要对以上代码进行修改,从而实现更加复杂的串口通信功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值