如何设置QTextEdit中的行数?

19

我使用QTextEdit进行一些输入。但我想调整框的高度。我能否根据我想要在同一时间看到的行数来设置高度?

5个回答

14
如果你使用 QPlainTextEdit,可以像这样做:
void SetHeight (QPlainTextEdit* edit, int nRows)
  {
  QFontMetrics m (edit -> font()) ;
  int RowHeight = m.lineSpacing() ;
  edit -> setFixedHeight  (nRows * RowHeight) ;
  }
你可能想要添加两到三个像素的边距;试验会告诉你。

10
这会忽略小部件的边距和边框,因此最后一行会被截断。需要添加的像素数量取决于使用的主题,因此这比较复杂。 - Goswin von Brederlow

10

改进有关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
使用QFont来确定QTextEdit中单行文本的高度(QTextEdit应该有一个font属性)。之后,将QFontheight值乘以您想要显示的行数,并将小部件(最小)高度设置为该值。

QTextEdit的问题在于每行可能具有不同的高度。如果您只需要单一的文本格式(但允许使用不同的颜色),也许QPlainTextEdit更好。 - TonyK

1

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


QTextEdit默认启用鼠标滚轮缩放功能,因此您需要将其关闭。 - TonyK

1

这应该可以工作:

QTextEdit *myEdit = new QTextEdit(myContentString);
QSize myEditSize = myEdit->document()->size().toSize();
myEditSize.setWidth(QWIDGETSIZE_MAX);
myEdit->setMaximumSize(myEditSize);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接