16

我对一些输入使用 QTextEdit。但我想调整盒子的高度。我可以根据我希望一次可见的行数来设置高度吗?

4

5 回答 5

11

如果你使用QPlainTextEdit,这样的事情应该可以解决问题:

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

您可能想要添加两个或三个像素作为边距;实验会告诉你。

于 2011-03-10T14:08:42.323 回答
7

改进关于QPlainTextEdit. 除了lineSpacing,值setFixedHeight应该包含:底层的 2 个边距,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);
}
于 2017-10-29T06:09:14.383 回答
2

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

于 2011-03-10T11:13:07.307 回答
1

这应该有效:

QTextEdit *myEdit = new QTextEdit(myContentString);
QSize myEditSize = myEdit->document()->size().toSize();
myEditSize.setWidth(QWIDGETSIZE_MAX);
myEdit->setMaximumSize(myEditSize);
于 2011-08-17T16:43:31.790 回答
1

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

于 2011-03-10T11:09:20.297 回答