I use a QTextEdit for some inputs. But I want to adjust the height of the box. Can I set the height based on the number of lines I want to have visible at a time?
5 Answers
If you use QPlainTextEdit
, something like this should do the trick:
void SetHeight (QPlainTextEdit* edit, int nRows)
{
QFontMetrics m (edit -> font()) ;
int RowHeight = m.lineSpacing() ;
edit -> setFixedHeight (nRows * RowHeight) ;
}
You might want to add two or three pixels as margin; experiment will tell.

- 16,761
- 4
- 37
- 72
-
9This ignores the margin and border of the widget so the last line is cut of. The amount of pixels to add depends on the theme in use so it's more complex than this. – Goswin von Brederlow Jun 18 '15 at 09:32
Improving the accepted answer about QPlainTextEdit
. In addition to lineSpacing
, value for setFixedHeight
should contain: 2 margins of the underlying QTextDocument
, 2 widths of the frame and widget's contents margins. Besides that, QFontMetrics
must be got from a font of the document, not of the widget itself. So, hypothetical function setHeight
should read as follows:
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);
}
Use QFont
to determine the height of a single line of text in the QTextEdit
(QTextEdit should have a font property). After that multiply the QFont
's height value with the number of lines you want to show and set the widget's (minimum-)height to that value.

- 19,679
- 11
- 56
- 86
-
The trouble with QTextEdit is that each line can have a different height. If you only need a single text format (but with different colours allowed), maybe QPlainTextEdit is better. – TonyK Mar 10 '11 at 14:00
QTextEdit is a normal widget, so you can use minimumHeight property. I believe, however, that it is really impossible to set minimum height based on number of lines. This would resize automagically the minimum size of a widget every time you change size of the font. But if you know the size of the font, you can set some usable minimum size of your widget.

- 40,948
- 31
- 128
- 181
-
QTextEdit has mouse wheel zoom enabled by default, so you would need to turn this off. – TonyK Mar 10 '11 at 14:01
This should work:
QTextEdit *myEdit = new QTextEdit(myContentString);
QSize myEditSize = myEdit->document()->size().toSize();
myEditSize.setWidth(QWIDGETSIZE_MAX);
myEdit->setMaximumSize(myEditSize);

- 6,078
- 9
- 43
- 63