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

2023-11-17

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);

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • QML 连接:不推荐使用连接中隐式定义的 onFoo 属性

    升级到 Qt 5 15 时收到以下错误消息 QML Connections Implicitly defined onFoo properties in Connections are deprecated Use this syntax
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • CANopen基本概念学习笔记

    参考文献 Kinco FD CD3系列伺服驱动器使用手册20210125 CANopen协议讲解课件 信捷 CANopen 通讯用户手册 基于CANopen协议的网络主控制器的设计 前置文章 CAN总线技术基本概念简述 0 CANopen简
  • 【分布式ID】理解Snowflake算法的实现原理

    1 概述 转载 冷饭新炒 理解Snowflake算法的实现原理 我上次也看了一个视频讲解 分布式ID 键高并发 分布式 全局唯一 ID 雪花算法 snowflake 2 前提 Snowflake 雪花 是Twitter开源的高性能ID生成算
  • idea 的使用与快捷键

    前面写过一篇IDEA的入门级文章 但是只学会了那些配置啊什么的并不能提高我们的开发效率 事实上 如果你IDEA用的足够熟练 就可以把鼠标扔了 附入门级教程传送门 http blog csdn net qq 31655965 article
  • 使用两个栈(stack)实现一个队列(queue)

    题目 已知下面Stack类及其3个方法Push Pop和Count 请用2个Stack实现Queue类的入队 Enqueue 出队 Dequeue 方法 class Stack public void Push int x Push an
  • C# Revit二次开发基础/核心编程--- 元素Element(基础、编辑)

    一 本节课程 C Revit二次开发基础 核心编程 元素Element 基础 编辑 二 本节要讲解的知识点 元素Element的基础概念 如何编辑元素 具体内容 元素Element基础 元素在Revit里面尤其重要 用户能看见的大多数对象都
  • gsoap工具生成wsdl接口 注意事项

    wsdl是通过wsdl文件作为不同应用的通信接口 所以如何生成wsdl语言很重要 但是很多时候我们发现自己编写的头文件通过gsoap工具soapcpp2 exe从头文件中无法正常生成对应的wsdl语言 几经寻找 终于发现 通过对应头文件 h
  • 使GDAL库支持中文路径或中文文件名的处理方法

    之前生成的gdal 2 1 1动态库 在通过命令行执行时 遇到有中文路径或中文图像名时 GDALOpen函数不能正确的被调用 如下图 解决方法 1 在所有使用GDALAllRegister 语句后面加上一句CPLSetConfigOptio
  • 万万没想到,曾经以为的 VSCode 专属代码工具,竟然可以这样…

    如果你知道 VSCode 一说起它 你可能第一个想到的就是把它当做一个代码编辑器 而它的界面应该可能大概率是这样的 如果你恰好又是个程序员 那你可能经常会用到它 不管是 Python JS 还是 C 等各种语言对应的文件 都可以用它来进行简
  • Java中使用MultipartFile 接受图片或者文件超过2MB就会出现异常MultipartFile类型不能接受

    解决方法 在配置文件中写入这个配置 然后就可以根据业务在进行限制了
  • 混淆保护需正确命名!看.NET Core代码保护工具.NET Reactor如何规定

    NET Reactor是一个功能强大的代码保护和软件许可系统 适用于为 NET Framework编写的软件 并支持生成 NET程序集的所有语言 NET Reactor迎来了久违的版本更新 进入v6 3 0 0全新时代 支持Blazor保护
  • 大端对齐 和小端对齐

    大端对齐 高内存地址放整数高位 低内存地址放整数低位 例如x86 arm都是采用大端对齐 小端对其 高内存地址放整数低位 低内存地址放整数高位 例如unix大型服务器 转载于 https www cnblogs com Json28 p 1
  • Linux内核文件系统知识大总结

    1 文件系统特点 文件系统要有严格的组织形式 使得文件能够以块为单位进行存储 文件系统中也要有索引区 用来方便查找一个文件分成的多个块都存放在了什么位置 如果文件系统中有的文件是热点文件 近期经常被读取和写入 文件系统应该有缓存层 文件应该
  • crash 工具使用

    1 rd 命令 用法 读取内核虚地址或者内核符号值 默认16进制显示 类型为unsigned long 并且会将值对应的ascii码显示出来 rd lt 内核地址 gt 或 rd lt 内核符号 gt 如果不需要将右边的ascii码显示出来
  • 【AIX 命令学习】lspv -M hdisk1

    lspv M hdisk1查看 hdisk1物理分区与逻辑分区的对应关系 pvname PP PP LVname LP COPY PVname 系统指定的物理卷名称 PP物理卷上的物理分区编号 如果一段连续的物理分区是空闲的 则使用一段PP
  • 计算机网络之7层协议

    7层协议图解 通俗的理解 1 首先物理层解决两个硬件之间怎么通信 具体就是一台发些比特流 然后另一台能收到 物理层的作用 主要定义物理设备标准 如网线的接口类型 光纤的接口类型 各种传输介质的传输速率等 它的主要作用是传输比特流 就是由1
  • el-tabs中使用Echarts警告。Can‘t get DOM width or height. Please check dom.clientWidth and dom.clientHeight

    具体警告 Can t get DOM width or height Please check dom clientWidth and dom clientHeight They should not be 0 For example yo
  • SnowFlake 雪花算法实现以及详解

    背景简介 现在的服务基本是分布式 微服务形式的 而且大数据量也导致分库分表的产生 对于水平分表就需要保证表中 id 的全局唯一性 对于 MySQL 而言 一个表中的主键 id 一般使用自增的方式 但是如果进行水平分表之后 多个表中会生成重复
  • 软件测试基础之软件缺陷处理

    一 什么是缺陷 不满足用户确定需求 影响软件功能实现的问题 故障 缺陷就是人们通常所说的bug ex 一下哪一种选项不属于软件缺陷 A 软件没有实现产品规格说明所要求的功能 B 软件中出现了产品规格说明不应该出现的功能 C 软件实现了产品规
  • 【电路设计】RC振荡器 - 文氏电桥振荡器

    一 文氏电桥振荡器的工作原理 文氏电桥振荡器广泛用于产生几Hz到几百kHz频段范围的可变频率振荡器 主要由两部分构成 具有正反馈作用的RC串并联选频网络 gt 以满足相位平衡条件 具有负反馈作用的同相放大器 gt 以满足振幅平衡条件 其工作
  • Qt中用textEdit发送文本遇到的换行问题

    用textEdit发送文本遇到的换行问题 在开发BLE通讯的过程中遇到了以下问题 在自己写的BLE上位机的输入框textEdit中输入数据 回车换行之后发送 但串口调试助手处接收的数据没有换行 但是在串口调试助手的输入框中输入数据再回车换行