2012-04-10 15 views

答えて

28

void QLayout::setAlignment (Qt::Alignment alignment)を使用して、お好みに合わせてアライメントを設定します。

14

これはちょうどlayout.setAlignment()を使用するよりも少し複雑です。私はあなたが最大の高さを設定しているウィジェットを展開している場合、そのウィジェットはあなたが望むようには整列しないことを理解した時点で、今まで私のために働いていませんでした。

は、ここで私はlayout.setAlignment(Qt.AlignTop)を呼び出していてもないトップはQTextBrowser()ウィジェットを合わせないコード例です。残念ながら、それは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

これも私の問題を解決しました。私は本当になぜ* 1つの最小幅/高さを設定する必要があるか分からない。おそらくそれについて解説してもらえますか? – Seth

4

2つのソリューション間の比較の後、それはようです:いくつかのウィジェットalignementため

myLayout.setAlignment(Qt.AlignTop) 

は動作しますが:

myLayout.setAlignment(myWidget, Qt.AlignTop) 

はあなたがレイアウトに追加するだけで最初のウィジェットのために働きます。結局のところ、ソリューションはあなたのウィジェットのQSizePolicyにも依存しています。

4

あなたはQVBoxLayoutを持っているし、あなたの固定サイズのウィジェットが上に積み重ねることがしたい場合は、単に垂直ストレッチが終わりを追加する追加することができます

layout.addStretch() 

あなたが複数のストレッチャーや他のストレッチのアイテムを持っている場合は、サイズ比を定義する整数ストレッチファクタ引数を指定できます。

addStretchおよびaddSpacerItemも参照してください。

これがあなたの元の質問に答えるかどうかはわかりませんが、私がグーグルでこのページに導かれたときの答えです。他の人にとっても役立つかもしれません。

+0

ポストに500サムを追加する方法はありますか? – Acidic

関連する問題