2010-11-23 1 views
14

제 폼에는 확인 가능한 QListWidgetItems가 포함 된 QListWidget이 있습니다. QListWidgetItem의 이벤트를 체크/체크하지 않는 이벤트를 캡처하는 방법을 찾고있다. 나는 그런 신호가 존재하지 않는다고 보지만 어쩌면 내가 틀렸다는 것을 알 수있다. 현재 내가하고있는 일은 QListWidget :: itemClicked() 신호를 사용하고 QListWidgetItem의 checkState를 확인하는 것입니다. 그러나이 이벤트는 항목이 클릭 될 때마다 발생하기 때문에 원하는 것은 아닙니다. 체크 표시가 전환 된 것이 아닙니다. . 누구든지 도움을 줄 수 있습니까? 감사!Qt/C++ : QListWidgetItem이 선택되었을 때의 신호입니까?

+1

나는 QListWidget :: itemChanged() 신호를 사용하여이 문제를 해결할 수 있다고 생각하는데, 이는 아이템을 체크/체크 해제 할 때 트리거되지만, 아이템의 값을 편집하면 트리거 될 것이다. 지금은 안되지만, 여전히 불완전한 해결책입니다. – Joseph

+1

'QListWidget :: itemClicked()'의 또 다른 문제점은 키보드를 사용할 때 Space 키를 사용하여 선택 상태를 변경하는 것과 같이 실행되지 않는다는 것입니다. – Hossein

답변

18

분명히 그러한 신호는 제공되지 않으므로 QListWidget::itemChanged(QListWidgetItem* item)을 사용하고 그 결과로 item->checkState()을 스캔하는 것이 가장 좋습니다. 사용에 약간의 개선이 있어야합니다. itemClicked

+0

보호 된 신호입니다. 나는이 오류를 [여기] (https://stackoverflow.com/q/48059796/1080355)와 같이 사용하면 오류가 발생합니다. – VSB

0

추가 옵션은 QListView으로 자신의 QAbstractListModel을 사용하는 것입니다. 처음에는 자신 만의 관리 코드를 추가해야하므로 추가 코드가 추가되었습니다. 그러나 당신은 더 낮은 수준의 접근을 얻습니다. 기본적으로 QListView이 할 일을 물어볼 것입니다. 또한 입력을 사용자의 목록 모델에 다시 전달하여 사용자가 연결할 수 있습니다.

또는 QStandardItemModel의 하위 클래스로 변경하여 확인란을 변경하는 것과 관련된 특정 수정 사항을 얻을 수 있습니다.

관련 문제