Улучшение принятого ответа о QPlainTextEdit
.В дополнение к lineSpacing
значение для setFixedHeight
должно содержать: 2 поля нижележащего QTextDocument
, 2 ширины рамки и поля содержимого виджета.Кроме того, QFontMetrics
должно быть получено из шрифта документа, а не из самого виджета.Итак, гипотетическая функция setHeight
должна выглядеть следующим образом:
void setHeight (QPlainTextEdit *ptxt, int nRows)
{
QTextDocument *pdoc = ptxt->document ();
QFontMetrics fm (pdoc->defaultFont ());
QMargins margins = ptxt->contentsMargins ();
int nHeight = fm.lineSpacing () * nRows +
(pdoc->documentMargin () + ptxt->frameWidth ()) * 2 +
margins.top () + margins.bottom ();
ptxt->setFixedHeight (nHeight);
}