Solución:
usar void QLayout::setAlignment ( Qt::Alignment alignment )
método para establecer la alineación de acuerdo con su elección.
Si tienes un QVBoxLayout
y desea que sus widgets de tamaño fijo se apilen en la parte superior, simplemente puede agregar un estiramiento vertical al final:
layout.addStretch()
Si tiene varias camillas u otros elementos de estiramiento, puede especificar un argumento de factor de estiramiento entero que defina su relación de tamaño.
Consulte también addStretch y addSpacerItem.
Suma dos layout.addStretch()
antes y después de agregar los widgets para centrarlos verticalmente:
layout.addStretch()
layout.addWidget(self.message)
layout.addWidget(self.userid_field)
layout.addWidget(self.password_field)
layout.addWidget(self.loginButton)
layout.addStretch()
No estoy seguro de si esto responde a su pregunta original, pero es la respuesta a la que tenía cuando busqué en Google y me llevaron a esta página, por lo que también podría ser útil para otros.
Encuentro esto un poco más complicado que usar layout.setAlignment()
. Seguía sin funcionar para mí hasta ahora, cuando descubrí que si tiene widgets en expansión para los que establece una altura máxima, entonces ese widget no se alineará de la manera que desea.
Aquí hay un código de ejemplo que hace no superior alinea el QTextBrowser()
widget a pesar de que 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_()
Lo siguiente llama explícitamente layout.setAlignment(info, Qt.AlignTop)
para que funcione el widget de texto de gasto.
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_()