我使用QTextEdit进行一些输入。但我想调整框的高度。我能否根据我想要在同一时间看到的行数来设置高度?
QPlainTextEdit
,可以像这样做:void SetHeight (QPlainTextEdit* edit, int nRows)
{
QFontMetrics m (edit -> font()) ;
int RowHeight = m.lineSpacing() ;
edit -> setFixedHeight (nRows * RowHeight) ;
}
你可能想要添加两到三个像素的边距;试验会告诉你。改进有关QPlainTextEdit
的被接受答案。除了lineSpacing
之外,setFixedHeight
的值应包含:基础QTextDocument
的2个边距、框架和小部件内容边距的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);
}
QFont
来确定QTextEdit
中单行文本的高度(QTextEdit
应该有一个font属性)。之后,将QFont
的height值乘以您想要显示的行数,并将小部件(最小)高度设置为该值。QTextEdit是一个普通的小部件,因此您可以使用minimumHeight属性。然而,我相信根据行数设置最小高度真的是不可能的。这将自动调整小部件的最小大小,每次更改字体大小时都会发生。但是,如果您知道字体的大小,您可以设置一些可用的小部件最小大小。
这应该可以工作:
QTextEdit *myEdit = new QTextEdit(myContentString);
QSize myEditSize = myEdit->document()->size().toSize();
myEditSize.setWidth(QWIDGETSIZE_MAX);
myEdit->setMaximumSize(myEditSize);