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

相关文章

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

SpringCloud使用Nacos 配置中心实现配置自动刷新功能使用

《SpringCloud使用Nacos配置中心实现配置自动刷新功能使用》SpringCloud项目中使用Nacos作为配置中心可以方便开发及运维人员随时查看配置信息,及配置共享,并且Nacos支持配... 目录前言一、Nacos中集中配置方式?二、使用步骤1.使用$Value 注解2.使用@Configur

Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)

《Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)》本文主要介绍了Golang分布式锁实现,采用Redis+Lua脚本确保原子性,持可重入和自动续期,用于防止超卖及重复下单,具有一定... 目录1 概念应用场景分布式锁必备特性2 思路分析宕机与过期防止误删keyLua保证原子性可重入锁自动

Qt之QMessageBox的具体使用

《Qt之QMessageBox的具体使用》本文介绍Qt中QMessageBox类的使用,用于弹出提示、警告、错误等模态对话框,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.简单介绍3.常见函数4.按钮类型(QMessage::StandardButton)5.分步骤实现弹窗6.总结1.引言

Qt中Qfile类的使用

《Qt中Qfile类的使用》很多应用程序都具备操作文件的能力,包括对文件进行写入和读取,创建和删除文件,本文主要介绍了Qt中Qfile类的使用,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.QFile文件操作3.演示示例3.1实验一3.2实验二【演示 QFile 读写二进制文件的过程】4.

python利用backoff实现异常自动重试详解

《python利用backoff实现异常自动重试详解》backoff是一个用于实现重试机制的Python库,通过指数退避或其他策略自动重试失败的操作,下面小编就来和大家详细讲讲如何利用backoff实... 目录1. backoff 库简介2. on_exception 装饰器的原理2.1 核心逻辑2.2

Java如何根据文件名前缀自动分组图片文件

《Java如何根据文件名前缀自动分组图片文件》一大堆文件(比如图片)堆在一个目录下,它们的命名规则遵循一定的格式,混在一起很难管理,所以本文小编就和大家介绍一下如何使用Java根据文件名前缀自动分组图... 目录需求背景分析思路实现代码输出结果知识扩展需求一大堆文件(比如图片)堆在一个目录下,它们的命名规

使用Python实现实时金价监控并自动提醒功能

《使用Python实现实时金价监控并自动提醒功能》在日常投资中,很多朋友喜欢在一些平台买点黄金,低买高卖赚点小差价,但黄金价格实时波动频繁,总是盯着手机太累了,于是我用Python写了一个实时金价监控... 目录工具能干啥?手把手教你用1、先装好这些"食材"2、代码实现讲解1. 用户输入参数2. 设置无头浏

Python+Tkinter实现Windows Hosts文件编辑管理工具

《Python+Tkinter实现WindowsHosts文件编辑管理工具》在日常开发和网络调试或科学上网场景中,Hosts文件修改是每个开发者都绕不开的必修课,本文将完整解析一个基于Python... 目录一、前言:为什么我们需要专业的Hosts管理工具二、工具核心功能全景图2.1 基础功能模块2.2 进