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 回答