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

相关文章

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是

PDF 软件如何帮助您编辑、转换和保护文件。

如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的 PDF 文档软件需求。 不同的 PDF 文档软件程序可以具有不同的功能,因此在决定哪个是最适合您的 PDF 软件之前,请花点时间评估您的

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点

使用Qt编程QtNetwork无法使用

使用 VS 构建 Qt 项目时 QtNetwork 无法使用的问题 - 摘叶飞镖 - 博客园 (cnblogs.com) 另外,强烈建议在使用QNetworkAccessManager之前看看这篇文章: Qt 之 QNetworkAccessManager踏坑记录-CSDN博客 C++ Qt开发:QNetworkAccessManager网络接口组件 阅读目录 1.1 通用API函数

Level3 — PART 3 — 自然语言处理与文本分析

目录 自然语言处理概要 分词与词性标注 N-Gram 分词 分词及词性标注的难点 法则式分词法 全切分 FMM和BMM Bi-direction MM 优缺点 统计式分词法 N-Gram概率模型 HMM概率模型 词性标注(Part-of-Speech Tagging) HMM 文本挖掘概要 信息检索(Information Retrieval) 全文扫描 关键词

Qt多语种开发教程

Qt作为跨平台的开发工具,早已应用到各行各业的软件开发中。 今天讲讲,Qt开发的正序怎么做多语言开发。就是说,你设置中文,就中文显示;设置英语就英文显示,设置繁体就繁体显示,设置发育就显示法语等。 开发环境(其实多语种这块根环境没太大关系):win10,Qt.5.12.10 一.先用QtCreator创建一个简单的桌面程序 1.工程就随便命名“LanguageTest”,其他默认。 2.在设计师

Weex入门教程之4,获取当前全局环境变量和配置信息(屏幕高度、宽度等)

$getConfig() 获取当前全局环境变量和配置信息。 Returns: config (object): 配置对象;bundleUrl (string): bundle 的 url;debug (boolean): 是否是调试模式;env (object): 环境对象; weexVersion (string): Weex sdk 版本;appName (string): 应用名字;