问题说明
在QT开发过程中,经常使用到QPlainTextEdit来填入大量的文字,一般我们都会设置QPlainText的固定高度或者默认高度,但是随着文字的增多,就会自动出现滚动条,有时候我们可能需要QPlainText的高度随着自动适应文字的高度(即是说不需要出现滚动条)
解决办法
解决办法参考 QPlainText自适应高度的论坛,发现如果有大量空行,还是会出现滚动条,因此就在此基础上修改了一下,是否正确需要自己去验证一下,代码如下:
int getDivisionValue(int x,int y)
{
return static_cast<int>(ceil((static_cast<float>(x))/y));
}
/**
* @brief CommonUtil::countPlainTextEditFixedHeight QPlainTextEdit
* @param plianTextEdit
* @param nRowCount:获取的行数
* @return
*/
int countPlainTextEditFixedHeight(QPlainTextEdit *plainTextEdit,int &nRowCount)
{
int blockCount = plainTextEdit->blockCount();//有多少个块。就代表有多少个空行
//计算字体的宽度
int nSumWidth =plainTextEdit->fontMetrics().width(plainTextEdit->toPlainText());
int nUiWidth =plainTextEdit->width();//
int nHeight =plainTextEdit->fontMetrics().lineSpacing();//字体每一行的高度
//字体宽度/每一行的宽度为字体占据多少行
nRowCount =getDivisionValue(nSumWidth,nUiWidth);
//最终的行数为字体占据的行数+空行的行数(计算的可能不太正确,需要自己去验证)
nRowCount = nRowCount + blockCount;
return nHeight * nRowCount;
}
PS:如果大家有什么更好的办法,欢迎留言评论