如何设置QTextEdit的行数?
如果使用QPlainTextEdit
,这样的事情应该做的伎俩:
void SetHeight (QPlainTextEdit* edit, int nRows)
{
QFontMetrics m (edit -> font()) ;
int RowHeight = m.lineSpacing() ;
edit -> setFixedHeight (nRows * RowHeight) ;
}
您可能要添加两个或三个像素作为保证金;实验会告诉。
QTextEdit是一个普通的小部件,所以你可以使用minimumHeight属性。但是,我相信,根据行数设置最小高度是不可能的。每次更改字体大小时,这会自动调整小部件的最小大小。但是如果你知道字体的大小,你可以设置一些可用的小部件大小。
QTextEdit默认情况下启用了鼠标滚轮缩放,因此您需要关闭此功能。 – TonyK 2011-03-10 14:01:40
使用QFont
确定文本在QTextEdit
一行的高度(的QTextEdit应该有一个字体属性)。之后,将QFont
的高度值与要显示的行数相乘,并将小部件的(最小)高度设置为该值。
QTextEdit的问题在于每行可以有不同的高度。如果你只需要一种文本格式(但允许不同的颜色),也许QPlainTextEdit更好。 – TonyK 2011-03-10 14:00:30
这应该工作:
QTextEdit *myEdit = new QTextEdit(myContentString);
QSize myEditSize = myEdit->document()->size().toSize();
myEditSize.setWidth(QWIDGETSIZE_MAX);
myEdit->setMaximumSize(myEditSize);
提高约QPlainTextEdit
接受的答案。除lineSpacing
之外,setFixedHeight
的值应包含:底层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);
}
这会忽略小部件的边距和边框,以便剪切最后一行。要添加的像素数量取决于正在使用的主题,因此它比这更复杂。 – 2015-06-18 09:32:27