QListWidget или QListView с QItemDelegate?

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

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

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

извините за такой огромный пост. Я немного смущен всей концепцией того, когда использовать QListWidget / QListView.

2 ответов


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

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

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

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

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


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

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