2017-03-21 25 views
1
볼 수

까지 확장은 QTextEdit 스크롤 바가 사라질 때까지 레이아웃 스트레치가 확장되기 시작하여 QLabelQPushButton 사이의 틈이 드러납니다.내가이 순서대로 다음 위젯 <code>QDialog</code> (<code>QVBoxLayout</code>)이 완전히

이 문제를 해결하기위한 합리적인 방법은 무엇입니까?
참고 : QDialog는 크기 조정 가능하며 QTextEdit에는 줄 바꿈 기능이 설정되어 있습니다.

편집 : QT4/PySide를 들어, 다음이 그것을 것보다 더 어렵습니다

class TextEdit(qt.QTextEdit): 
    def __init__(self, *args, **kwargs): 
     qt.QTextEdit.__init__(self, *args, **kwargs) 
     self.document().modificationChanged.connect(self.updateMaxHeight) 

    def updateMaxHeight(self, *args): 
     self.setMaximumHeight(self.document().size().height()) 

    def resizeEvent(self, e): 
     qt.QTextEdit.resizeEvent(self, e) 
     self.updateMaxHeight() 

class MyDialog(qt.QDialog): 
    def __init__(self, *args, **kwargs): 
     qt.QDialog.__init__(self, *args, **kwargs) 
     self.setLayout(qt.QVBoxLayout()) 
     self.textEdit = TextEdit('Example text') 
     self.layout().addWidget(self.textEdit, 1) #1 for resizable 
     self.layout().addWidget(qt.QLabel('Example label') 
     self.layout().addStretch() 
     self.layout().addWidget(qt.QPushButton('Example button') 

답변

1

작동합니다 :

class TextEdit : public QTextEdit 
{ 
public: 
    TextEdit(QWidget *parent = nullptr) 
    : QTextEdit(parent) 
    { 
    setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents); 
    connect(this, &TextEdit::textChanged, this, &TextEdit::updateGeometry); 
    } 

    QSize viewportSizeHint() const override 
    { 
    return document()->size().toSize(); 
    } 
}; 
아이디어는 뷰포트의 크기 힌트를 확인하는 것입니다

이 크기에 해당 스크롤 영역을 뷰포트의 크기에 맞게 조정합니다. 또한 문서에 새로운 라인이 추가 될 때 레이아웃이 통지되도록해야합니다.

layout->addStretch(1); 
+0

이 작동하지 않습니다 : 그것은 편집기를 사용하여 공간을 공유 시작하지 않도록

퍼즐의 마지막 조각은 스트레치 항목에게 더 큰 스트레치 요소를 제공하는 것입니다. OP는 PySide (Qt4)를 사용하므로'setSizeAdjustPolicy'가 없습니다. – ekhumoro