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

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


person Mnementh    schedule 10.03.2011    source источник


Ответы (5)


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

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

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

person TonyK    schedule 10.03.2011
comment
При этом игнорируются поля и границы виджета, поэтому последняя строка обрезается. Количество добавляемых пикселей зависит от используемой темы, поэтому это сложнее, чем это. - person Goswin von Brederlow; 18.06.2015

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

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

person BastiBen    schedule 10.03.2011
comment
Проблема с QTextEdit в том, что каждая строка может иметь разную высоту. Если вам нужен только один текстовый формат (но разрешены разные цвета), возможно, QPlainTextEdit лучше. - person TonyK; 10.03.2011

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

person gruszczy    schedule 10.03.2011
comment
В QTextEdit по умолчанию включено масштабирование колесиком мыши, поэтому вам нужно отключить его. - person TonyK; 10.03.2011

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

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