2017-03-21 4 views
1

erweitert Ich habe ein QDialog (QVBoxLayout) mit den folgenden Widgets um: QTextEdit, QLabel, [layout stretch], QPushButtonQTextEdit, bis sie vollständig sichtbar

Das Problem ist, dass ich die QTextEdit mit den QDialog erweitern möchte, aber nur bis die Bildlaufleiste verschwindet, woraufhin sich die Layout-Ausdehnung ausdehnen sollte, was eine Lücke zwischen der QLabel und der QPushButton ergibt.

Was wäre ein sinnvoller Weg?
Hinweis: Der QDialog ist in der Größe veränderbar und das QTextEdit hat das Umbrechen von Wörtern.

Edit: Für Qt4/pyside, sollte die folgende Arbeit

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') 

Antwort

1

Das ist schwieriger als es scheint:

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(); 
    } 
}; 

Die Idee ist es, die Darstellungsgröße Hinweis auf die Größe entsprechen zu machen des Scripts und passen Sie den Bildlaufbereich an die Größe des Ansichtsfensters an. Sie müssen auch sicherstellen, dass das Layout benachrichtigt wird, wenn neue Zeilen zum Dokument hinzugefügt werden.

Das letzte Stück des Puzzles ist Ihrer Strecke Elemente einen größeren Dehnungsfaktor zu geben, damit es nicht Raum mit dem Editor teilen startet:

layout->addStretch(1); 
+0

Das wird nicht funktionieren. OP benutzt PySide (Qt4), also gibt es keine 'setSizeAdjustPolicy'. – ekhumoro

Verwandte Themen