2

QListViewたとえば 3x3 で単純なグリッドを作成したいのですが、 のgridSize()オプションはQListViewそのようには機能しません。 のすべての子ウィジェットの幅/高さQListViewです。どうすればよいですか?

4

1 に答える 1

0
class Widget(QtGui.QWidget):
    def __init__(self):
        super(Widget, self).__init__()
        self.resize(600,400)
        layout = QtGui.QVBoxLayout(self)
        self.list = QtGui.QListWidget()
        self.list.addItems(['item_%d' % i for i in xrange(9)])
        self.list.setViewMode(self.list.IconMode)
        self.list.setResizeMode(self.list.Adjust)
        self.list.installEventFilter(self)
        layout.addWidget(self.list)

    def eventFilter(self, obj, event):
        if obj is self.list and event.type() == event.Resize:
            gridsize = self.list.size()/3
            # remove from width to account for the scrollbar
            gridsize.setWidth(gridsize.width()-15)
            self.list.setGridSize(gridsize)

        return super(Widget, self).eventFilter(obj, event)

gridSize はリスト全体であると考えていましたが、実際にはセルごとです。ここで重要なことは、サイズ変更モードを調整するように設定して、常に項目のサイズを再評価し、リスト ウィジェットのサイズが変更されるたびに gridSize を調整し続けることです。この例では、イベント フィルターを使用していますが、リストをサブクラス化し、resizeEvent を再実装することもできます。

リストのサイズは 3 で割られ、スクロールバーの一部のパディングが削除されます。その結果、アイテムは 3 倍の幅でレイアウトされ、ビューに合わせてサイズ変更されます。

于 2012-07-08T00:47:37.700 に答える