2016-05-19 4 views
2

В настоящее время я работаю над списком, который я хотел бы настроить в стиле сетки, и мне было любопытно, как я могу это сделать. Я не верю, что таблица будет работать, потому что я хотел бы, чтобы он отформатирован так:Как создать стиль сетки QListWidget?

option option option option 

option option option option 

option option option option 

option option option option 

~ 4 варианта в каждом ряду и никакой дополнительной информации, разбитый на колоннах, где каждая строка представляет один ListWidgetItem.

ответ

2

Вы ищете что-то вроде этого:

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 и идите оттуда, пока не получите желаемое поведение.

+0

Спасибо, твой был единственным ответом, который удовлетворяет мои потребности. Я сделаю это, когда завтра приеду на работу! –

+0

Упс. Я понял, что вы хотите max в четырех столбцах. Возможно, вам понадобится сделать несколько настроек, чтобы получить это поведение, поскольку 'QListWidget' заполняет все доступное пространство. –

+2

Не беспокойтесь, это было довольно легко, как только я получил эту информацию. Для кого-то любопытного вы просто устанавливаете wrapping в true, тогда вы делаете что-то вроде list_width = items_per_row * list_item_width –

1

Зависит, если у вас есть статическое количество элементов, вы можете использовать QGridLayout.

Если у вас есть QAbstractListModel, вы можете реализовать свой собственный вид, реализовав QAbstractItemView и QAbstractItemDelegate, что и делает QTableView.

+0

Это будет меняющееся количество предметов, которые добавляются «на лету». Кроме того, есть ли примеры того, как это сделать, поскольку я не знаком с тем, как изменить макет с помощью QAbstractView (я использую pyside, поэтому большинство всего, что я делаю, - это qt-дизайнер)? –

+0

@ Obj3ctiv3_C_88: Я никогда не касался дизайнера pyside или qt, поэтому я не могу вам помочь. Сожалею. –

0

Возможно, вы захотите использовать QTableWidget или 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'])