내 프로젝트에서 QGraphicsScene
을 사용하고 코드 전체에 항목을 추가/제거하고 있습니다.addItem 또는 itemChange에서 QGraphicsScene의 알림을받는 방법?
이제 QGraphicsItem
이 추가되거나 제거 될 때마다 알림을 받고 싶습니다. 많은 Qt 클래스에는 이러한 변경에 대해 호출되는 알림 신호 또는 최소한 가상 함수가 있습니다. 난 성가신뿐만 아니라 안전하지 않은 (삽입/제거를 지금 또는 미래에 잊어 버리는) 많은 장소에서 많은 행의 코드를 추가하는 것을 피하려고합니다.
QGraphicsItem
과 호환되는 솔루션이 필요합니다. -> 아무도 없다
- 이 (
QAbstractItemModel::rowsInserted()
같이)QGraphicsScene
의 신호에 연결 :이
작동하지 않는 것들의 목록입니다. - 을
QGraphicsScene
에서 상속 받고 가상 알림 기능을 오버로드 (QTabWidget::tabInserted()
에서와 같이) -> 없습니다. - 상속 및 과부하
addItem()
, 전송 통지 (QMdiArea::addSubWindow()
에서와 같이) 자신 ->addItem
가상하지 않고QGraphicsItems
의 생성자에서 호출됩니다. - 새로 추가 된 이벤트 필터는
QGraphicsItems
입니다.> 새로 추가 된 항목을 얻는 방법을 모르면 다른QGraphicsItems
에만 설치할 수있는sceneEventFilter
이됩니다. - 에 연결
itemChange()
은QGraphicsItem
->itemChange
은 신호가 아니며 과부하가 아닙니다.QGraphicsItem
은 옵션이 아닙니다. - 랩
QGraphicsScene
(개인 회원으로 장면을 가진) 만 기능을 노출addItem
및removeItem
->하지만 여전히scene()
기능을 통해 액세스 할 수있는 장면QGraphicsItems
때문에,이 솔루션은 충분히 안전하지 않습니다.
항목 변경 사항에 대한 알림은 어떻게 받습니까?
간단히 놓친 쉬운 방법이 있으면 알려주십시오. 그렇지 않으면 이것에 대한 아이디어를 매우 고맙게 생각합니다.
가장 좋은 방법은 QGraphicsScene을 랩핑하고 래퍼에 자신의'addItem()'함수를 제공하는 것입니다. – pmr
'QGraphicsItem'은 장면 변경 (장면 추가/제거 포함)을'sceneEvent (QEvent * event)'메소드로 하위 클래스로 분류 할 수 없기 때문에 문제를 매우 깨끗하고 조정 가능한 해결책을 제공합니다. – cmannett85
@pmr 말했듯이'addItem()'함수는 가상이 아니며'QGraphicsItem'의 생성자에서 호출됩니다. 그래서 이것은 완전한 해결책은 아닙니다. –