3

qscrollarea があり、その中に qgridlayout があります。グリッド レイアウトで、多数のカスタム ウィジェットを作成し (簡単にするために、これらのウィジェットはグループ ボックスとラベルにすぎません)、各行に 1 つ追加します。

垂直スクロールバーを表示する代わりに、カスタム ウィジェットはすべてスクロール領域のサイズに合わせて圧縮されます。

次の方法でカスタム ウィジェットをスクロール領域に追加します。

    def addBookWidget(self):
    self.book_grid = QtGui.QGridLayout(self.book_scrollArea)

    widget = py_BookWidget(self.book_scrollArea)
    widget2 = py_BookWidget(self.book_scrollArea)
    widget3 = py_BookWidget(self.book_scrollArea)
    widget4 = py_BookWidget(self.book_scrollArea)
    widget5 = py_BookWidget(self.book_scrollArea)
    widget6 = py_BookWidget(self.book_scrollArea)
    widget7 = py_BookWidget(self.book_scrollArea)


    self.book_grid.addWidget(widget,0,0)
    self.book_grid.addWidget(widget2,1,0)
    self.book_grid.addWidget(widget3,2,0)
    self.book_grid.addWidget(widget4,3,0)
    self.book_grid.addWidget(widget5,4,0)
    self.book_grid.addWidget(widget6,5,0)
    self.book_grid.addWidget(widget7,6,0)
    self.book_scrollArea.setLayout(self.book_grid)

    widget.show()
    widget2.show()
    widget3.show()
    widget4.show()
    widget5.show()
    widget6.show()
    widget7.show()

カスタム ウィジェットは QWidget を拡張し、sizeHint を再実装します。

class py_BookWidget(QtGui.QWidget):
def __init__(self, parent=None):
    super(py_BookWidget, self).__init__(parent)
    self.book = Ui_book_widget()  
    self.book.setupUi(self)  #This is loading my QT Designer Code

def sizeHint(self):
    print "test"
    return QtCore.QSize(660, 300)

sizeHint メソッドが呼び出されていますが、ウィジェットはまだ非常に小さい高さに押しつぶされています。カスタム ウィジェットのすべての要素の幅と高さは固定されており、高さと幅の最小値と最大値は 660、300 に設定されています。

誰でも試す提案はありますか?ありがとうございました!

追加情報: スクロール領域は MainWindow にあり、widgetResizable ブール値は False に設定されています。

明日は、カスタム ウィジェットを削除して、scrollArea を通常のウィジェットで動作させることができるかどうかを確認します。

4

1 に答える 1

2

QScrollArea は 1 つのウィジェットのみを受け入れます。レイアウトはありません。

レイアウトとウィジェットをプレーン QWidget に追加し、それを setWidget() で QScrollArea に追加します。

于 2011-03-04T21:18:24.527 に答える