Qt中用textEdit发送文本遇到的换行问题

在Windows环境下开发BLE上位机时,遇到textEdit输入数据发送后在串口调试助手端无法正常换行的问题。原因是缺少 字符。通过使用QString的indexOf和insert方法初试尝试,但无法处理多个 的情况。最终通过replace方法将所有 替换为 ,成功解决了多行换行的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

textEdit发送文本遇到的换行问题

在开发BLE通讯的过程中遇到了以下问题:

在自己写的BLE上位机的输入框textEdit中输入数据、回车换行之后发送,但串口调试助手处接收的数据没有换行;但是在串口调试助手的输入框中输入数据再回车换行后发送,BLE上位机处接收的数据有换行

确定问题

将上位机发送的数据用qDebug打印到终端查看,发现在textEdit输入框中打了回车后,发送的数据中只有一个\n,没有\r
在这里插入图片描述

参考这个博客,在Windows中,如果要实现想要的换行的效果(到下一行并使光标回到行首),需要在末尾加上\r\n;本上位机也运行在Windows系统中,所以需要针对此问题进行解决。

解决过程

一开始的思路是在字符串中寻找\n,每有一个\n说明进行一次换行,那么我们只要在每一个\n前加上\r即可。查阅了QString官方手册发现了indexOfinsert方法,于是实现了如下代码:

QString str = "\r"; //要插入的内容
QString text = ui->btSendDataTextEdit->toPlainText(); //当前输入框中的数据
if(text.indexOf("\n") != -1) //数据中有\n,插入\r; 怎么应对一个以上的换行?
{
    int index = text.indexOf("\n");
    text.insert(index, str);
}
m_bleServicePtr->writeCharacteristic(m_bleWriteCharacteristic, text.toUtf8(), QLowEnergyService::WriteWithResponse); //写特性,发送数据

但是由于indexOf的限制,只能发现\n第一次出现的索引,当有多个\n时无法正确处理。

再次查阅了QString官方手册后,发现了replace方法,正好可以满足我的需求。

在这里插入图片描述

使用了QStringreplace方法实现了如下代码,成功解决了应对多个换行的问题:

QString str = "\r\n"; //将\n替换为\r\n
QString text = ui->btSendDataTextEdit->toPlainText(); //当前输入框中的数据
if(text.indexOf("\n") != -1) //如果有\n
{
    text.replace("\n","\r\n"); //将每个\n都替换为\r\n
}
m_bleServicePtr->writeCharacteristic(m_characteristicSelectionDialog->getWriteCharacteristic(), text.toUtf8(), QLowEnergyService::WriteWithResponse);

使用了这个方法终于实现了想换行就换行、不想换行就不换行的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lupinjia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值