持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情
首先看一下直观效果
功能描述:
默认编辑框的高度=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++程序猿~