Как установить количество строк для QTextEdit?

Я использую QTextEdit для некоторых входов. Но я хочу отрегулировать высоту коробки. Могу ли я установить высоту на основе количества строк, которые я хочу видеть одновременно?

5 ответов


Если вы используете QPlainTextEdit, что-то вроде этого должно сделать трюк:

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

вы можете добавить два или три пикселя в качестве поля; эксперимент покажет.


использовать QFont определить высоту одной строки текста в QTextEdit (QTextEdit должен иметь шрифт свойства). После этого умножьте QFont ' s высота значение с количеством строк, которые вы хотите показать, и установите высоту виджета (минимум -) в это значение.


улучшение принятого ответа о 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);
}

QTextEdit-это обычный виджет, поэтому вы можете использовать minimumHeight собственность. Я считаю, однако, что действительно невозможно установить минимальную высоту на основе количества линий. Это автоматически изменит минимальный размер виджета при каждом изменении размера шрифта. Но если вы знаете размер шрифта, вы можете установить некоторый полезный минимальный размер виджета.


Это должно работать:

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