2012-04-10 6 views

ответ

28

использование void QLayout::setAlignment (Qt::Alignment alignment) способ установить выравнивание в соответствии с вашим выбором.

14

Я считаю это немного более сложным, чем просто использование layout.setAlignment(). Он продолжал работать не для меня до тех пор, пока я не понял, что если у вас есть расширение виджета, на которое установлена ​​максимальная высота, то этот виджет не будет выровнен так, как вы хотите.

Вот пример кода, который делает не верхний выравнивает виджет QTextBrowser(), хотя я звоню layout.setAlignment(Qt.AlignTop). Извините, что он находится в Python, но его довольно легко перевести на C++ (я пошел другим путем много раз).

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

Следующая явно вызывает layout.setAlignment(info, Qt.AlignTop), чтобы получить расходуя текст виджет для работы.

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

Это также решило мою проблему. Я не совсем уверен * почему * нужно установить минимальную ширину/высоту. Не могли бы вы объяснить это? – Seth

4

После сравнения между двумя решениями, кажется, что:

myLayout.setAlignment(Qt.AlignTop) 

работает для нескольких виджетов alignement но:

myLayout.setAlignment(myWidget, Qt.AlignTop) 

работает только для первого виджета добавить в макете , В конце концов, решение зависит также от QSizePolicy ваших виджетов.

4

Если у вас есть QVBoxLayout и хотите, чтобы ваши виджеты Фикс.разм быть уложены в верхней части, вы можете просто добавить вертикальную натяжку добавить конец:

layout.addStretch() 

Если у вас есть несколько носилок или другие предметов, натяжные, вы можете указать аргумент целочисленного коэффициента растяжения, который определяет их соотношение размеров.

См. Также addStretch и addSpacerItem.

Не уверен, отвечает ли этот вопрос на ваш первоначальный вопрос, но это ответ на тот, который у меня был при поиске в Google и на эту страницу, поэтому он может быть полезен и для других.

+0

Есть ли способ добавить 500 палец вверх к сообщению? – Acidic

 Смежные вопросы

  • Нет связанных вопросов^_^