Я использую QTextEdit для некоторых входов. Но я хочу отрегулировать высоту коробки. Могу ли я установить высоту в зависимости от количества строк, которые я хочу видеть одновременно?
Как установить количество строк для QTextEdit?
Ответы (5)
Если вы используете QPlainTextEdit
, что-то вроде этого должно помочь:
void SetHeight (QPlainTextEdit* edit, int nRows)
{
QFontMetrics m (edit -> font()) ;
int RowHeight = m.lineSpacing() ;
edit -> setFixedHeight (nRows * RowHeight) ;
}
Возможно, вы захотите добавить два или три пикселя в качестве поля; эксперимент покажет.
Улучшение принятого ответа о 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);
}
Используйте QFont
для определения высоты одной строки текста в QTextEdit
(QTextEdit должен иметь свойство font). После этого умножьте значение height QFont
на количество строк, которые вы хотите отобразить, и установите (минимальную) высоту виджета на это значение.
QTextEdit — это обычный виджет, поэтому вы можете использовать свойство minimumHeight. Однако я считаю, что установить минимальную высоту на основе количества строк действительно невозможно. Это будет автоматически изменять размер минимального размера виджета каждый раз, когда вы меняете размер шрифта. Но если вы знаете размер шрифта, вы можете установить минимальный размер вашего виджета.
Это должно работать:
QTextEdit *myEdit = new QTextEdit(myContentString);
QSize myEditSize = myEdit->document()->size().toSize();
myEditSize.setWidth(QWIDGETSIZE_MAX);
myEdit->setMaximumSize(myEditSize);