Qt|QTextEdit编辑文本自动拉伸高度以及踩坑经验

2024-01-31 09:12

本文主要是介绍Qt|QTextEdit编辑文本自动拉伸高度以及踩坑经验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近做开放项目时,遇到了这样一个需求:使用QTextEdit编辑文本,随着编辑文本的变化,窗口高度自适应拉伸。

实现该功能的核心思想:响应QTextEdit::textChanged消息,实时获取QTextEdit高度,当编辑框内容的高度超过最小值时,需要修改QTextEdit的高度。

对于TextEdit编辑框自动拉伸的功能,很多博友也有记录,今天主要是针对踩坑经验分析,为大家分享!

首先看一下实现效果~

接下来,详细讲述如何实现该功能吧!

开发环境

VS2017 + Qt5.14.2

功能实现

1:拖出控件,更改控件滚动条

默认拖出来的控件,当编辑的文本高度超出可视化区域后会出现垂直滚动条。为了不显示右侧滚动条,需要将滚动条属性关闭。

2:响应QTextEdit文本变化消息

因为要随着文本的变化而改变编辑框的高度,所以,需要在QTextEdit::textChanged中实时获取编辑框中内容的实际高度。

2.1:记录编辑框的高度值。

需要记录两个高度值:

1、初始高度值。

当控件的高度实时变化时,清空所有文本需要恢复到默认高度。

定义变量:m_nEditDefaultHeight;

2:最近一次修改的高度值。

在每次进行文本变化时,需要与上次的高度进行对比,只有在高度变化时才需要更新控件的区域,减少了交互。适用于widget窗口中控件较多、层级较多时,页面刷新不及时问题。这里请大家一定要注意,很好提高性能的方法!

定义变量:m_nEditLastHeight;

2.2:实时更改高度值。

获取内容变化时,编辑框内容的高度值。

int nHeight = ui.editContent->document()->size().height();

当获取的高度值小于初始高度值时,不做任何处理。

if (nHeight < m_nEditDefaultHeight)
{//当前编辑框的内容高度 < 最小值时nHeight = m_nEditDefaultHeight;
}

当前内容高度大于默认值时,并且与上一次记录的最新高度值(m_nEditLastHeight)不一致时,再进行控件变化。

if (nHeight == m_nEditLastHeight)
{//当前内容高度,和上次记录高度一致时,不做处理
}
else
{//当前输入的高度超过文本展示最小值时,更新高度m_nEditLastHeight = nHeight;QRect rectOldContent = ui.editContent->geometry();ui.editContent->setGeometry(rectOldContent.left(), rectOldContent.top(), rectOldContent.width(), nHeight);
}

以上就是简单的实现方式,实时的改变Edit的高度。

踩坑

这一部分就是我在开发过程中遇到的踩坑问题。

1:不想用QTextEdit::textChanged实时改变高度值,该如何设置?

QString qsContent = QStringLiteral("测试文本!");
ui.editContent->setPlainText(qsContent);
int nHeight = ui.editContent->document()->size().rheight();

此时nHeight就是实际编辑内容的高度值。需要注意,这里是rheight(),与响应消息中仅有一个字母之差!

2:问题1获取的高度值,一直=0是为什么?

这个问题,遇到的举手~

是不是问题1的代码写的不对?No!代码没问题,有问题的是调用时机不对!

当需要展示编辑框的父窗口未显示时,直接调用问题1的这块代码,获取的nHeight一定是0。

例如:QTestWidget中需要展示该编辑框的自适应功能。

那么写法一定是如下方式,一定要先show出窗口来。

QTestWidget *widget = new QTestWidget(this);
widget->show();
widget->功能设置();

3:避免使用QTextDocument::adjustSize();

很多人在获取不到有效高度值时,都会下意识的认为,是不是没有自适应大小的原因?

其实在实现之初我也应用了该功能:

ui.editContent->setPlainText("需要展示的文本");QTextDocument *doc = m_editContent->document();
doc->adjustSize();int nHeight = doc->size().rheight();

但是当窗口中控件较多,进行控件焦点切换时,你就会发现,编辑框中的文本会莫名其妙的自动换行,而且实时输入文本时,也会自动换行。展示效果真是让人匪夷所思!

doc->adjustSize();慎写!

以上就是我在实现QTextEdit高度实时拉伸时遇到的坑以及功能实现,希望对大家有所帮助!

我是糯诺诺米团,一名C++开发程序媛~

这篇关于Qt|QTextEdit编辑文本自动拉伸高度以及踩坑经验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/663240

相关文章

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取