项目需求自定义控件:一个宽度固定,高度根据内容自适应的文本编辑框。
效果如下图所示:
之前尝试了一些其他方法,效果并不理想,比如:根据edit的滚动条的当前位置和最大值的差值,重新设置edit的高度,达到滚动条消失,高度自适应的效果。
最终解决方案:通过根据内容重新调整edit中document的大小,设置edit的高度,不需要进行数值计算了。
核心代码:
//之前的Edit高度
int oldHeight = textEdit->height();
//调整文字高度并设置
QTextDocument *doc = textEdit->document();
//获得调整之后的Edit高度
int height = doc->size().height();
int width = doc->size().width();
//如果宽高小于最小宽高,设置为最小宽高
textEdit->setMinimumSize(175, 26);
QSize minSize = textEdit->minimumSize();
if (height < minSize.height())
{
height = minSize.height();
}
if (width != minSize.width())
{
width = minSize.width();
}
doc->setTextWidth(width);
//重新设置Edit高度
textEdit->setFixedHeight(height);