2012-04-10 7 views

Antwort

28

Verwenden Sie void QLayout::setAlignment (Qt::Alignment alignment) Methode zum Festlegen der Ausrichtung nach Ihrer Wahl.

14

Ich finde das ein wenig komplizierter als nur mit layout.setAlignment(). Es funktionierte bis zu diesem Zeitpunkt nicht für mich, als ich herausfand, dass bei Widgets, für die Sie eine maximale Höhe festlegen, dieses Widget nicht so ausgerichtet ist, wie Sie es möchten.

Es folgt ein Beispielcode, der tut nicht oben ausrichten QTextBrowser() Widget obwohl ich layout.setAlignment(Qt.AlignTop) nennen. Tut mir leid, dass es in Python ist, aber es ist ziemlich einfach in C++ zu übersetzen (ich bin oft in die andere Richtung gegangen).

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

class MyWidget(QWidget): 
    """ 
    Create a widget that aligns its contents to the top. 
    """ 

    def __init__(self, parent=None): 

     QWidget.__init__(self, parent) 

     layout = QVBoxLayout() 

     label = QLabel('label:') 
     layout.addWidget(label) 

     info = QTextBrowser(self) 
     info.setMinimumHeight(100) 
     info.setMaximumHeight(200) 
     layout.addWidget(info)   
     # Uncomment the next line to get this to align top. 
#   layout.setAlignment(info, Qt.AlignTop) 

     # Create a progress bar layout. 
     button = QPushButton('Button 1')   
     layout.addWidget(button)   

     # This will align all the widgets to the top except 
     # for the QTextBrowser() since it has a maximum size set. 
     layout.setAlignment(Qt.AlignTop) 

     self.setLayout(layout) 


if __name__ == '__main__': 

    import sys 

    app = QApplication(sys.argv) 

    widget = MyWidget() 
    widget.show() 
    widget.resize(QSize(900, 400)) 

    app.exec_() 

Die folgende ausdrücklich nennt layout.setAlignment(info, Qt.AlignTop) die Aufwendung Text-Widget zur Arbeit zu kommen.

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

class MyWidget(QWidget): 
    """ 
    Create a widget that aligns its contents to the top. 
    """ 

    def __init__(self, parent=None): 

     QWidget.__init__(self, parent) 

     layout = QVBoxLayout() 

     label = QLabel('label:') 
     layout.addWidget(label) 

     info = QTextBrowser(self) 
     info.setMinimumHeight(100) 
     info.setMaximumHeight(200) 
     layout.addWidget(info)   
     # Uncomment the next line to get this to align top. 
     layout.setAlignment(info, Qt.AlignTop) 

     # Create a progress bar layout. 
     button = QPushButton('Button 1')   
     layout.addWidget(button)   

     # This will align all the widgets to the top except 
     # for the QTextBrowser() since it has a maximum size set. 
     layout.setAlignment(Qt.AlignTop) 

     self.setLayout(layout) 


if __name__ == '__main__': 

    import sys 

    app = QApplication(sys.argv) 

    widget = MyWidget() 
    widget.show() 
    widget.resize(QSize(900, 400)) 

    app.exec_() 
+0

Das löste mein Problem auch. Ich bin mir nicht wirklich sicher * warum * muss man aber eine minimale Breite/Höhe einstellen. Könnten Sie das vielleicht erläutern? – Seth

4

Nach dem Vergleich zwischen den beiden Lösungen, scheint es, dass:

myLayout.setAlignment(Qt.AlignTop) 

Werke für mehr Widget alignement aber:

myLayout.setAlignment(myWidget, Qt.AlignTop) 

Werke nur für das erste Widget, das Sie in das Layout hinzufügen . Schließlich hängt die Lösung auch von der QSizePolicy Ihrer Widgets ab.

4

Wenn Sie eine QVBoxLayout haben und möchten Ihre feste Größe Widgets auf der Oberseite gestapelt werden, können Sie einfach fügen Sie eine vertikale Strecke das Ende hinzufügen:

layout.addStretch() 

Wenn Sie mehrere Tragbahren oder andere Stretcheinzelteile haben, Sie können ein Ganzzahl-Stretch-Faktor-Argument angeben, das ihr Größenverhältnis definiert.

Siehe auch addStretch und addSpacerItem.

Nicht sicher, ob dies Ihre ursprüngliche Frage beantwortet, aber es ist die Antwort auf die, die ich beim googlen hatte und zu dieser Seite geführt wurde - so könnte es auch für andere nützlich sein.

+0

Gibt es eine Möglichkeit, einem Beitrag 500 Daumen hoch hinzuzufügen? – Acidic