QListWidget или QListView с QItemDelegate?
Скажем, мне нужно отобразить список элементов. Каждый элемент содержит QPushButton изображение и некоторый текст. Когда пользователь нажимает кнопку, что-то должно произойти (т.е. мне нужно получить сигнал). Каков правильный способ реализовать это в Qt?
После некоторого чтения я понимаю, что если я использую QListWidget и QListWidgetItem, это может быть достигнуто. Я могу подклассировать каждый QListWidgetItem в соответствии с моими потребностями и установить их в виджет списка.
Однако я также читал, что более подходящий подход (подход MODEL View) заключается в использовании QlistView в сочетании с QItemDelegate. Но если я использую QItemDelegate, кажется, что я могу только рисовать виджеты. Как я могу получить событие кнопки?
Извините за этот огромный пост. Я немного смущен всей концепцией использования QListWidget/QListView.
Ответы
Ответ 1
QListWidget
- это, по сути, настраиваемая версия QListView
, предназначенная для стандартных случаев виджетов списка, когда все, что вы делаете, просто представляет изображение или текстовые элементы в списке, а связь с базовой моделью проста.
С QListWidget
и связанным с ним классом QListWidgetItem
вы можете, например, вставлять и удалять элементы очень легко. Но если вы вставляете QPushButtons
, то вы не можете использовать это, чтобы вы могли просто использовать QListView
и его (унаследованные) методы для установки виджета для данного индекса.
Что касается сигнала, так как вы создадите QPushButton
s, просто используйте
QObject::connect(my_button, SIGNAL(clicked()),...)
чтобы справиться с этим.
Ответ 2
Чтобы отличить от ответа Matt, кажется, вы можете использовать свой собственный виджет на QListWidgetItem
, как указано в этом сообщении на qt-project.org: http://qt-project.org/forums/viewthread/17953.
Это может быть полезно, если у вас есть только несколько элементов для отображения и не заинтересованы в том, чтобы приготовить класс модели.