Qt gridmode中的QListView:行/列上具有固定项的自动拉伸

Qt gridmode中的QListView:行/列上具有固定项的自动拉伸,qt,qt4,Qt,Qt4,我想用QListView制作一个简单的网格,例如3x3,但是QListView中的gridSize()选项不起作用,它是QListView中所有子部件的宽度/高度,我应该怎么做 class Widget(QtGui.QWidget): def __init__(self): super(Widget, self).__init__() self.resize(600,400) layout = QtGui.QVBoxLayout(self)

我想用
QListView
制作一个简单的网格,例如3x3,但是
QListView
中的
gridSize()
选项不起作用,它是
QListView
中所有子部件的宽度/高度,我应该怎么做

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是整个列表,但实际上是每个单元格。这里的关键是将调整大小模式设置为调整,以便始终重新评估项目大小,并且在每次列表小部件调整大小时保持调整网格大小。在我的示例中,我使用了一个事件过滤器,但是您也可以对列表进行子类化并重新实现resizeEvent

列表的大小除以3,然后删除滚动条的一些填充。结果是项目以3倍宽度进行布局,并随着视图不断调整大小

虽然我认为gridSize是整个列表,但实际上是每个单元格。这里的关键是将调整大小模式设置为调整,以便始终重新评估项目大小,并且在每次列表小部件调整大小时保持调整网格大小。在我的示例中,我使用了一个事件过滤器,但是您也可以对列表进行子类化并重新实现resizeEvent


列表的大小除以3,然后删除滚动条的一些填充。结果是项目以3倍宽度排列,并随着视图不断调整大小。

是的,实际上我希望项目大小能够自动调整大小,同时保持例如3x3的网格布局,在不实现例如resizeEvent()的情况下是否可以尝试将lisview.setResizeMode设置为Adjust@warl0ck:给你。这应该可以做到,我想是的,实际上我希望在保持例如3x3的网格布局的同时,项目大小可以自动调整,不实现例如resizeEvent()是否可以尝试将lisview.setResizeMode设置为Adjust@warl0ck:给你。我想应该这样