2014-09-19 2 views
3

QListview의 각 Item에 Object onClick을 삭제하는 Button을 추가하는 것이 가능합니까? 다음 그림과 같이 :QListView의 각 항목에 삭제 버튼 추가

Item witch delete Button

편집 : 나는 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 문서에서 권장하지 않습니다. –

0

또한 목록보기의 기본 모델을 포함하여 다양한 컨테이너에서 작동 할 수있는 일반적인 접근 방법을 사용할 수 있습니다.

목록의 각 항목이 requestRemoval(Item*) 신호와 removeMe() 슬롯, removeMe()에 당신이 당신의 "부모의 removeHandler(Item*) 슬롯에 연결되어있는 requestRemoval(this) 신호를 방출, 각 항목 생성자의 removeMe() 슬롯에 X 버튼을 연결할 수있다

"요청을 삭제 한 항목의 포인터를받는 해당 항목을 만들 때의 개체이며 사용중인 기본 컨테이너에서 제거합니다.

기본적으로 제거 단추를 누르면 해당 항목이 부모 항목의 포인터를 부모 제거 핸들러로 보내어 해당 항목을 제거합니다.

EDIT : 이것은 일반적인 접근법입니다. 아래 주석에서 언급했듯이 신호 및 슬롯 없이도 적용 할 수 있으며, 작동하더라도 특정 사례에서 가장 효율적인 솔루션은 아닙니다.

+0

항목에 대해 QObject를 인터 히트하는 것은 좋지 않습니다. 그들 중 많은 수가있을 수 있으며 대량 연결은 느리고/많은 메모리를 먹을 수 있습니다. –

+0

@DmitrySazonov - 사실입니다. 연결 자체는 문제가되지 않지만 'QObject' 자체는 비교적 큰 것입니다. 그러나 그의 예는 실제로 수천, 수천만의 물건을 의미하지는 않습니다. 어떤 경우에는'QObject' 또는'QWidget' 파생 된 객체를 사용할 수 있습니다. – dtech

+0

또한 QObejct/signals 및 slots 없이도 동일한 패턴을 사용할 수 있습니다. 각 항목에 "부모"포인터를 추가하고 생성자에서 초기화 한 다음 간단히'parent-> remove (this) '를 호출하십시오. 총 비용 - 포인터 1 개 ... – dtech