如何创建网格样式的QListWidget?

How to create grid style QListWidget?

我目前正在处理一个列表,我想将其设置为网格样式,并且很好奇我该怎么做。我不相信 table 会起作用,因为我希望它的格式如下:

option  option  option  option

option  option  option  option

option  option  option  option

option  option  option  option

每行约 4 个选项,没有进一步的信息拆分成列,其中每行代表一个 ListWidgetItem。

视情况而定,如果您有静态数量的项目,则可以使用 QGridLayout。

如果你有一个 QAbstractListModel,你可以通过实现 QAbstractItemView 和 QAbstractItemDelegate 来实现你自己的视图,这就是 QTableView 所做的。

您正在寻找这样的东西:

QListWidget *listWidget = new QListWidget;

//Lays out horizontally instead of vertically
listWidget->setFlow(QListView::LeftToRight);

//Dynamically adjust contents
listWidget->setResizeMode(QListView::Adjust);

//This is an arbitrary value, but it forces the layout into a grid
listWidget->setGridSize(QSize(64, 64));

//As an alternative to using setGridSize(), set a fixed spacing in the layout:
listWidget->setSpacing(someInt);

//And the most important part:
listWidget->setViewMode(QListView::IconMode);

在 Qt Designer 中使用这些属性。从设置 QListView::IconMode 开始,然后从那里开始,直到获得您想要的行为。

您可能想使用 QTableWidget or QTreeWidget。当一行中的项目与单个项目密切相关时(即每一行是一个项目,每一列是该项目的一个属性),我发现使用 QTreeWidget 更容易。

tree = QtGui.QTreeWidget()
tree.setHeaderLabels(['Name', 'Age', 'Weight'])
item = QtGui.QTreeWidgetItem(tree, ['John Doe', '24', '150'])
item = QtGui.QTreeWidgetItem(tree, ['Jane Doe', '21', '120'])