Как установить количество строк для QTextEdit? - PullRequest
15 голосов
/ 10 марта 2011

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

Ответы [ 5 ]

12 голосов
/ 10 марта 2011

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

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

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

3 голосов
/ 29 октября 2017

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

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

1 голос
/ 10 марта 2011

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

0 голосов
/ 17 августа 2011

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

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