2012-04-10 12 views

Respuesta

28

use el método void QLayout::setAlignment (Qt::Alignment alignment) para establecer la alineación según su elección.

14

Encuentro esto un poco más complicado que simplemente usar layout.setAlignment(). No funcionó para mí hasta ahora, cuando descubrí que si tiene widgets de expansión para los que establece una altura máxima, entonces ese widget no se alineará de la manera que desee.

Aquí es código de ejemplo que hace no superior a alinear el widget QTextBrowser() a pesar de que yo llamo layout.setAlignment(Qt.AlignTop). Lamento que esté en Python, pero es bastante fácil de traducir a C++ (he ido al revés muchas veces).

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_() 

El siguiente llama explícitamente layout.setAlignment(info, Qt.AlignTop) para obtener el widget de texto gastar para trabajar.

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

Esto resolvió mi problema también. No estoy seguro * por qué * uno necesita establecer un ancho/alto mínimo. ¿Podrías quizás exponer eso? – Seth

4

Después de la comparación entre las dos soluciones, parece que:

myLayout.setAlignment(Qt.AlignTop) 

obras para varias alineación Reproductor sino:

myLayout.setAlignment(myWidget, Qt.AlignTop) 

obras sólo para el primer widget que se suman a la disposición . Después de todo, la solución también depende de la QSizePolicy de sus widgets.

4

Si usted tiene un QVBoxLayout y desea que sus widgets de tamaño fijo para ser apilados en la parte superior, sólo tiene que añadir un estiramiento vertical añadir al final:

layout.addStretch() 

Si tiene varias camillas u otros elementos elásticos, puede especificar un argumento de factor de estiramiento entero que define su proporción de tamaño.

Véase también addStretch y addSpacerItem.

No estoy seguro de si esto responde a su pregunta original, pero es la respuesta a la que tuve cuando busqué en Google y fui guiada a esta página, por lo que podría ser útil para otros también.

+0

¿Hay alguna forma de agregar 500 pulgares a una publicación? – Acidic

Cuestiones relacionadas