QListWidget или QListView с QItemDelegate? - PullRequest
18 голосов
/ 14 мая 2011

Допустим, мне нужно отобразить список элементов. Каждый элемент содержит QPushButton изображение и текст. Когда пользователь нажимает на кнопку, что-то должно произойти (т.е. мне нужно получить сигнал). Как правильно реализовать это в Qt?

После некоторого прочтения я понимаю, что если я использую QListWidget и QListWidgetItem, это может быть достигнуто. Я могу создать подкласс каждого QListWidgetItem в соответствии с моими потребностями и установить их в виджете списка.

Тем не менее, я также читал, что более подходящий подход (подход MOdel View) заключается в использовании QlistView в сочетании с QItemDelegate. Но если я использую QItemDelegate, кажется, что я могу рисовать только виджеты. Как я могу получить событие кнопки?

Извините за этот огромный пост. Я немного сбит с толку всей концепцией использования QListWidget / QListView.

Ответы [ 2 ]

15 голосов
/ 15 мая 2011

QListWidget по сути является настроенной версией QListView, разработанной для стандартных случаев виджетов списка, когда все, что вы делаете, это просто представляете элементы изображения или текста в списке, и связь с базовой моделью является прямой.

С QListWidget и связанным с ним классом QListWidgetItem вы можете, например, вставлять и удалять предметы очень легко. Но если вы вставляете QPushButtons, то вы не можете использовать это, так что вы можете просто использовать QListView и его (унаследованные) методы для установки виджета для данного индекса.

Что касается сигнала, поскольку вы будете создавать QPushButton s, просто используйте

QObject::connect(my_button, SIGNAL(clicked()),...) 

чтобы справиться с этим.

6 голосов
/ 29 ноября 2013

В отличие от ответа Мэтта, кажется, вы можете использовать свой собственный виджет на QListWidgetItem, как указано в этом посте на qt-project.org: http://qt -project.org / forums / viewthread /17953.

Это может быть полезно, если у вас есть только несколько элементов для отображения, и вы не заинтересованы в том, чтобы готовить класс модели.

...