我使用QTextEdit进行输入。但我想调整盒子的高度。我可以根据我想要一次看到的行数来设置高度吗?
答案 0 :(得分:12)
如果你使用QPlainTextEdit
,这样的事情应该可以解决问题:
void SetHeight (QPlainTextEdit* edit, int nRows)
{
QFontMetrics m (edit -> font()) ;
int RowHeight = m.lineSpacing() ;
edit -> setFixedHeight (nRows * RowHeight) ;
}
您可能希望添加两个或三个像素作为边距;实验会说明。
答案 1 :(得分:3)
改进关于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);
}
答案 2 :(得分:2)
使用QFont
确定QTextEdit
中单行文本的高度(QTextEdit应具有 font 属性)。然后将QFont
的 height 值乘以您想要显示的行数,并将小部件的(最小 - )高度设置为该值。
答案 3 :(得分:1)
QTextEdit是一个普通的小部件,因此您可以使用minimumHeight属性。但是,我认为根据线数设置最小高度是不可能的。每次更改字体大小时,这将自动调整窗口小部件的最小大小。但是,如果您知道字体的大小,则可以设置窗口小部件的一些可用最小大小。
答案 4 :(得分:0)
这应该有效:
QTextEdit *myEdit = new QTextEdit(myContentString);
QSize myEditSize = myEdit->document()->size().toSize();
myEditSize.setWidth(QWIDGETSIZE_MAX);
myEdit->setMaximumSize(myEditSize);