QT 위젯을 여러 폼을 포함하는 폼 내부에서 사용하려고합니다. 폼 자체는 윈도우의 중앙 위젯 인 QScrollArea 안에 있습니다. 제 의도는 모든 위젯이 QScrollArea (위젯 내부가 아닌)에서 필요한 스크롤을 수행하며 내부의 위젯은 내용을 보유 할 높이를 자동으로 조정합니다.QT의 QTextEdit을 텍스트 높이에 맞게 조정 : maximumViewportSize()
QTextEdit을 사용하여 높이의 자동 크기 조정을 구현하려고했지만 이상한 문제가 발생했습니다. 난은 QTextEdit의 서브 클래스를 생성하고 이런 힌트 (sizehint)() 재 구현 :
QSize OperationEditor::sizeHint() const {
QSize sizehint = QTextBrowser::sizeHint();
sizehint.setHeight(this->fitted_height);
return sizehint;
}
this->는은 QTextEdit의 "contentsChanged()"신호에 연결되어,이 슬롯을 통해 최신 유지 fitted_height :
this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
나는 this post.
을 읽은 후이 방법을했다 :void OperationEditor::fitHeightToDocument() {
this->document()->setTextWidth(this->viewport()->width());
QSize document_size(this->document()->size().toSize());
this->fitted_height = document_size.height();
this->updateGeometry();
}
은 QTextEdit 서브 클래스의 크기 정책은
여기 내 문제가 있습니다 :
QTextEdit가 점차 창을 채우도록 크기가 조정되면 크기가 커지는 것을 멈추고 sizeHint()에서 반환 된 높이에 관계없이 QTextEdit 내에서 스크롤을 시작합니다. 처음에 sizeHint()가 큰 상수를 반환하면 QTextEdit은 매우 커서 QScrollArea 내부에 예상대로 포함됩니다. 그러나 sizeHint가 QTextEdit의 크기를 점차 커지기보다는 점차 커지면 현재 창을 채우고 자라는 대신 스크롤을 시작합니다.
내 sizeHint()가 반환하는 것과 상관없이 QAbstractScrollArea에서 상속 된 maximumViewportSize()에서 반환 된 값보다 큰 QTextEdit의 크기를 절대로 변경하지 않기 때문에이 문제를 추적했습니다. 이것은 viewport() -> maximumSize()와 같은 수는 아닙니다. 그 값을 설정하는 방법을 알아낼 수 없습니다.
QT의 소스 코드를 보면 maximumViewportSize()는 "스크롤 막대에 유효한 스크롤 범위가없는 것처럼 뷰포트의 크기"를 반환합니다. 이 값은 기본적으로 위젯에서 현재 크기 (2 * frameWidth + margin)와 스크롤바 폭/높이를 더한 값으로 계산됩니다. 이것은 나에게 많은 의미가되지 않으며, 그 번호가 하위 클래스의 sizeHint() 구현을 대체하는 방식으로 사용되는 이유는 분명하지 않습니다. 또한, 단일 "frameWidth"정수가 너비와 높이를 계산하는 데 사용된다는 것이 이상하게 보입니다.
누구든지이 문제에 대해 알려주시겠습니까? 나는 QT의 레이아웃 엔진에 대한 나의 가난한 이해가 여기에 있다고 비난한다.
편집 : 처음에이 게시물을 게시 한 후 maximumViewportSize()를 다시 구현하여 sizeHint()와 같은 것을 반환 할 생각이 들었습니다. 불행하게도, 나는 여전히 같은 문제를 가지고 있기 때문에 이것은 효과가 없습니다.
찾아 주셔서 감사합니다. 확실히 나중에 도움이 될 것입니다. –
Aaron, 솔루션에 대해 자세히 설명해 주시겠습니까? QTextEdit와 연결된 QScrollArea에 액세스 할 수없는 것 같습니다. QTextEdit에서 widgetResizable 속성을 설정 한 것을 설명 할 수 있습니까? 그들이 어떻게 연결되어 있는지? QTextEdit는 실제로 setWidgetResizable 속성이없는 QAbstractScrollArea에서 파생됩니다 (Qt 4.7에 있음). 고마워. 정말 날 귀찮게! – Dave
@supertwang 당신은 비슷한 질문 [내 대답] (http://stackoverflow.com/questions/11851020/a-qwidget-like-qtextedit-that-wraps-its-height-automatically-to-)을 확인하고 싶을 수도 있습니다. 그 내용/13599165 # 13599165). – laurasia