일부 입력에 QTextEdit을 사용합니다. 하지만 상자의 높이를 조정하고 싶습니다. 한 번에 볼 수있는 선의 수를 기준으로 높이를 설정할 수 있습니까?QTextEdit의 줄 수를 설정하는 방법은 무엇입니까?
답변
당신이 QPlainTextEdit
를 사용하는 경우,이 같은 트릭을 수행해야합니다
void SetHeight (QPlainTextEdit* edit, int nRows)
{
QFontMetrics m (edit -> font()) ;
int RowHeight = m.lineSpacing() ;
edit -> setFixedHeight (nRows * RowHeight) ;
}
당신은 여백으로 두 개 또는 세 개의 픽셀을 추가 할 수 있습니다
; 실험에서 알 수 있습니다.
QTextEdit은 일반적인 위젯이므로 minimumHeight 속성을 사용할 수 있습니다. 그러나 라인 수에 따라 최소 높이를 설정하는 것은 실제로 불가능하다고 생각합니다. 이렇게하면 글꼴 크기를 변경할 때마다 위젯의 최소 크기가 자동으로 조정됩니다. 그러나 폰트의 크기를 아는 경우, 사용 가능한 최소 크기의 위젯을 설정할 수 있습니다.
은 QTextEdit는 마우스 휠 줌은 기본적으로 사용할 수있다. – TonyK
사용 QFont
의 (a 글꼴 속성을 가져야한다은 QTextEdit)을 QTextEdit
에 1 행의 텍스트의 높이를 결정합니다. 그런 다음 QFont
의 높이와 값을 표시 할 줄 수와 곱하여 위젯의 (최소) 높이를 해당 값으로 설정하십시오.
QTextEdit의 문제는 각 줄의 높이가 다를 수 있다는 것입니다. 단일 텍스트 형식 만 있으면 (그러나 다른 색상이 허용됨) QPlainTextEdit이 더 나을 수도 있습니다. – TonyK
이 작동합니다 :
QTextEdit *myEdit = new QTextEdit(myContentString);
QSize myEditSize = myEdit->document()->size().toSize();
myEditSize.setWidth(QWIDGETSIZE_MAX);
myEdit->setMaximumSize(myEditSize);
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);
}
위젯의 여백과 경계를 무시하므로 마지막 줄이 잘립니다. 추가 할 픽셀의 양은 사용중인 테마에 따라 다르므로 이보다 더 복잡합니다. –