2014-09-19 6 views
3

Можно ли добавить к каждому элементу элемент в QListview Button, который удаляет объект onClick? Как показано на следующем рисунке:Добавить кнопку удаления для каждого элемента в QListView

Item witch delete Button

EDIT: Как я новичок в QT, было бы неплохо иметь несколько примеров, чтобы лучше понять его. И, как кажется, есть три разных Пути? Что будет лучше? Использовать QAbstractItemView?

+0

Как насчет использования делегатов? ('QStyledItemDelegate') –

ответ

1

Да. Вы должны будете использовать:

QAbstractItemView::setIndexWidget (const QModelIndex & index, QWidget * widget) 

QListView наследует QAbstractItemView и когда вы пытаетесь настроить представление списка/дерева, которые, как правило, место, чтобы посмотреть. Будьте осторожны, хотя без делегата это не очень хорошо масштабируется. Посмотрите эту тему: http://www.qtcentre.org/threads/26916-inserting-custom-Widget-to-listview

+0

Вставка виджетов в представления не рекомендуется в Qt docs для взаимодействия с пользователем. –

0

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

Каждый элемент в списке имеет requestRemoval(Item*) сигнал и слот removeMe(), подключите кнопку X к removeMe() слоту в каждом конструкторе элемента в removeMe() вы испускаете requestRemoval(this) сигнал, который подключается к слоту removeHandler(Item*) в вашем «родителе «объект при создании этого элемента, который получает указатель элемента, который имеет удаление запросов, и удаляет его из используемого базового контейнера.

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

EDIT: Обратите внимание, что это общий подход, как указано в комментариях ниже, его можно применять без сигналов и слотов, и даже если он будет работать, это не самое эффективное решение в вашем конкретном случае.

+0

Плохая идея, чтобы помешать QObjects для элементов. Их может быть много, и массовые соединения могут быть медленными/потреблять много памяти. –

+0

@DmitrySazonov - это правда, сами связи не так проблематичны, но сам 'QObject' относительно велик. НО его пример действительно не означает тысячи, а тем более миллионы объектов. В этом случае допустимо использование объектов 'QObject' или даже' QWidget'. – dtech

+0

Кроме того, тот же шаблон можно легко использовать без 'QObejct'/сигналов и слотов, просто добавьте« родительский »указатель на каждый элемент и инициализируйте его в конструкторе, а затем просто вызовите' parent-> remove (this) '. Общая стоимость - 1 указатель ... – dtech