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?
问题:
回答1:
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.
回答2:
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);
}
回答3:
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.
回答4:
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.
回答5:
This should work:
QTextEdit *myEdit = new QTextEdit(myContentString);
QSize myEditSize = myEdit->document()->size().toSize();
myEditSize.setWidth(QWIDGETSIZE_MAX);
myEdit->setMaximumSize(myEditSize);