Qt|QTextEdit随着内容进行缩放

93 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

首先看一下直观效果

AutoTextEdit.gif

功能描述:

默认编辑框的高度=100,当输入的内容高度超过控件本身原有高度时,控件进行放大,当输入的内容高度变小时,控件高度进行减少,直到减到最小值100,不再改变!

实现核心:

1:如何实时获取编辑框中内容

2:获取实际展示内容高度

3:窗口自动放大缩小功能

带着这三个问题,来实现今天的功能吧!

上一篇文章中介绍了如何获取输入内容的实际高度,那么用到这里真是太合适不过了!

想要根据内容的变化实时改变高度,此时,就需要实时获取编辑框中的内容。

QTextEdit实时获取内容变化

connect(ui.textEdit, &QTextEdit::textChanged, this, &QAutoTextEditTest::OnTextEditScrollBarChanged);

在这个实现函数中,QTextEdit编辑框中的内容每次变动时,都需要获取实际的内容高度,由此判断出控件的变化。

并且,需要注意的是,当实际内容的高度小于控件的高度时,此刻是不应该进行缩小的。

为了实现这一功能,需要定义两个变量,做什么用呢?

变量1:类型(int),用来记录上一次高度变化值。m_nEditLastHeight

变量2:类型(int),用来记录编辑框的最小高度值。m_nEditDefaultHeight

实现流程:

1:获取编辑框的实际内容高度

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

2:当实际高度小于默认高度时,展示的控件高度为默认高度

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

3:当前展示的高度与上次存储的内容高度,相同时,不进行更改

if (nHeight == m_nEditLastHeight)
{
	//当前内容高度,和上次记录高度一致时,不做处理
}

4:当此次的高度与上次存储的高度不一致时,进行控件修改

else
{
	int nTop = ui.textEdit->geometry().top();
	ui.textEdit->setGeometry(100, 160, 400, nHeight + 5);
	int nTotalHight = ui.textEdit->geometry().bottom() + 2;
	m_nEditLastHeight = nHeight;
}

在else中,此时,需要修改edit的高度,以及窗口的高度

功能很简单,大家尝试下吧~

今天的更新到这里就结束了~

我是中国好公民st,一名C++程序猿~