持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情
今天来讲解一个小功能,如何获取编辑框实际内容的高度。这里的实际内容高度并不是控件的高度哦~
在QTextEdit中,有一个简单的方式可以直接获取,代码如下:
int nHeight = m_editContent->document()->size().height();
QTextEdit::document():保存文本编辑器的底层文档。
最终使用的方法很简单,其中,中间经历了不少波折,下面我来给大家分享下,在获取高度时,走了哪些弯路~
错误思路1:
我能不能根据输入的行数,来计算文本的高度呢?
知道了总共输入的行数,那么根据每一行的高度进行相乘运算,不就可以得到总体实际内容的高度了吗?
int nCount = ui.edit->document()->lineCoun();
简单测试发现,是可以获取到实时的行数,我觉得应该可行了。
但是,多次测试后发现这样一个错误:当一行的文本过多时,edit控件会换行,经过换行的内容是不进行行数计算的!
此刻,还要用行数*单行高度进行计算时,会出现问题!
即使我们可以知道文本过多后换了几行,但是我们无法知道换行后,上下之间的间距是多少!所以,这个方法也不能使用,pass!
错误思路2:
我想到,内容过多时,肯定会出现滚动条,我为何不用滚动条的高度来表示实际内容高度呢?
获取QTextEdit的滚动条消息,并响应
connect(ui.edit->verticalScrollBar(), &QScrollBar::valueChanged, this, &QMyWidget::ChangedScrollBar);
每当接收到滚动条消息时,就可以获取到滚动条的长度。输出日志发现,可以根据滚动条的长度计算总体的文本内容长度。
在计算时,需要注意的是,在计算总高度时,要加上edit编辑框的默认窗口高度,否则,只是获取的滚动条扩充的高度。
我以为这样就算完成了,但是,再进行鼠标滚动时,发现滚动条传入的值居然在变动,我忘了这么关键性的因素了,这个方法果断要被抛弃了~
思路1、思路2是我走过的弯路,如果大家也要获取实际的edit高度,可以借鉴下,直接使用最上面的那句代码,轻松搞定,省的像我这般傻乎乎的尝试了!
今天的更新到这里结束了~
我是中国好公民st,一名C++开发程序猿~