Получите высоту обернутого текста в QTextEdit перед его отображением [duplicate]

Вы можете использовать

  myDropDown.Items.Remove (ListItem li);   

или

  myDropDown.Items.RemoveAt (int index);   

, чтобы удалить его с помощью C #.

14
задан Mnementh 10 March 2011 в 11:56
поделиться

5 ответов

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

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

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

12
ответ дан TonyK 17 August 2018 в 10:58
поделиться
  • 1
    Это игнорирует границу и границу виджета, так что последняя строка обрезана. Количество добавляемых пикселей зависит от используемой темы, поэтому она сложнее, чем эта. – Goswin von Brederlow 18 June 2015 в 09:32

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

2
ответ дан BastiBen 17 August 2018 в 10:58
поделиться
  • 1
    Проблема с QTextEdit заключается в том, что каждая строка может иметь разную высоту. Если вам нужен только один текстовый формат (но с разными цветами), возможно, QPlainTextEdit лучше. – TonyK 10 March 2011 в 15:00

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

1
ответ дан gruszczy 17 August 2018 в 10:58
поделиться
  • 1
    QTextEdit имеет масштабирование колесика мыши по умолчанию, поэтому вам нужно будет отключить его. – TonyK 10 March 2011 в 15:01

Улучшение принятого ответа о 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);
}
1
ответ дан guest 17 August 2018 в 10:58
поделиться

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

QTextEdit *myEdit = new QTextEdit(myContentString);
QSize myEditSize = myEdit->document()->size().toSize();
myEditSize.setWidth(QWIDGETSIZE_MAX);
myEdit->setMaximumSize(myEditSize);
0
ответ дан rcv 17 August 2018 в 10:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: