如何设置QTextEdit的行数?

Mne*_*nth 15 c++ qt qt4 qtextedit

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

Ton*_*nyK 13

如果你使用QPlainTextEdit,这样的东西应该做的伎俩:

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

您可能希望添加两个或三个像素作为边距; 实验会说明.

  • 这会忽略小部件的边距和边框,以便最后一行被剪切掉.要添加的像素数量取决于使用的主题,因此它比这更复杂. (6认同)

小智 6

改进关于 的公认答案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);
}
Run Code Online (Sandbox Code Playgroud)