2011-03-10 1 views

답변

12

당신이 QPlainTextEdit를 사용하는 경우,이 같은 트릭을 수행해야합니다

void SetHeight (QPlainTextEdit* edit, int nRows) 
    { 
    QFontMetrics m (edit -> font()) ; 
    int RowHeight = m.lineSpacing() ; 
    edit -> setFixedHeight (nRows * RowHeight) ; 
    } 
당신은 여백으로 두 개 또는 세 개의 픽셀을 추가 할 수 있습니다

; 실험에서 알 수 있습니다.

+2

위젯의 여백과 경계를 무시하므로 마지막 줄이 잘립니다. 추가 할 픽셀의 양은 사용중인 테마에 따라 다르므로 이보다 더 복잡합니다. –

1

QTextEdit은 일반적인 위젯이므로 minimumHeight 속성을 사용할 수 있습니다. 그러나 라인 수에 따라 최소 높이를 설정하는 것은 실제로 불가능하다고 생각합니다. 이렇게하면 글꼴 크기를 변경할 때마다 위젯의 최소 크기가 자동으로 조정됩니다. 그러나 폰트의 크기를 아는 경우, 사용 가능한 최소 크기의 위젯을 설정할 수 있습니다.

+0

은 QTextEdit는 마우스 휠 줌은 기본적으로 사용할 수있다. – TonyK

2

사용 QFont의 (a 글꼴 속성을 가져야한다은 QTextEdit)을 QTextEdit에 1 행의 텍스트의 높이를 결정합니다. 그런 다음 QFont높이와 값을 표시 할 줄 수와 곱하여 위젯의 (최소) 높이를 해당 값으로 설정하십시오.

+0

QTextEdit의 문제는 각 줄의 높이가 다를 수 있다는 것입니다. 단일 텍스트 형식 만 있으면 (그러나 다른 색상이 허용됨) QPlainTextEdit이 더 나을 수도 있습니다. – TonyK

0

이 작동합니다 :

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

QPlainTextEdit에 대한 허용 대답을 개선. lineSpacing 외에도 setFixedHeight의 값은 아래 두 개의 여백을 포함해야합니다. QTextDocument 여백, 프레임의 너비 및 위젯의 내용 여백 그 외에도 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); 
}