如何设置QTextEdit的行数?

问题描述:

我使用QTextEdit进行一些输入。但我想调整盒子的高度。我可以根据我想要一次看到的行数来设置高度吗?如何设置QTextEdit的行数?

如果使用QPlainTextEdit,这样的事情应该做的伎俩:

void SetHeight (QPlainTextEdit* edit, int nRows) 
    { 
    QFontMetrics m (edit -> font()) ; 
    int RowHeight = m.lineSpacing() ; 
    edit -> setFixedHeight (nRows * RowHeight) ; 
    } 

您可能要添加两个或三个像素作为保证金;实验会告诉。

+2

这会忽略小部件的边距和边框,以便剪切最后一行。要添加的像素数量取决于正在使用的主题,因此它比这更复杂。 – 2015-06-18 09:32:27

QTextEdit是一个普通的小部件,所以你可以使用minimumHeight属性。但是,我相信,根据行数设置最小高度是不可能的。每次更改字体大小时,这会自动调整小部件的最小大小。但是如果你知道字体的大小,你可以设置一些可用的小部件大小。

+0

QTextEdit默认情况下启用了鼠标滚轮缩放,因此您需要关闭此功能。 – TonyK 2011-03-10 14:01:40

使用QFont确定文本在QTextEdit一行的高度(的QTextEdit应该有一个字体属性)。之后,将QFont高度值与要显示的行数相乘,并将小部件的(最小)高度设置为该值。

+0

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); 
}