Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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