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