QGraphicsView 및 QGraphicsRectItem에서 파생되었습니다. 두 클래스에서 contextMenuEvent를 오버로드하여 팝업 메뉴를 제공했습니다. 항목을 클릭 할 때 QGraphicsItem 팝업 메뉴의 공백을 클릭하면 QGraphicsView 컨텍스트 메뉴가 필요합니다.Qt : QGraphicsView에서 QGraphicsSceneContextMenuEvent 전달
첫 번째 구현에서는 클릭 한 위치에 상관없이 QGraphicsView 팝업이 나타납니다. QGraphicsSceneContextMenuEvent에 대한
void CustomGraphicsView::contextMenuEvent(QContextMenuEvent* event)
{
if (QGraphicsItem *item = itemAt(event->pos())) {
MyRect* rect = dynamic_cast<MyRect*>(item);
QGraphicsSceneContextMenuEvent* context_event = dynamic_cast<QGraphicsSceneContextMenuEvent*>(event);
if (rect && context_event)
rect->contextMenuEvent(context_event);
}
else {
QMenu menu;
... create the QGraphicsView popup menu
}
}
dynamic_cast는 그래서 나는 RECT의 ContextMenuEvent로 전화를 결코 실패 : 다음과 같이 그래서 ContextMenuEvent로 수정했습니다. rect-> contextMenu()에 이벤트를 전달하려고하면 컴파일되지 않으므로 캐스트를 시도합니다.
어떻게해야할까요?
Qt를 사용하여 2D 모양을 생성/이동/회전/삭제하는 학습 프로젝트입니다. 누군가가 모든 것을보고 싶다면 알려주세요.
는 "dynamic_cast는 단지 클래스에 대한 포인터 및 참조 (또는 * 무효와) 함께 사용할 수 있습니다."라고 그것은 읽을만한 가치가있을 것입니다. –
당신은 이미 당신의 질문에 답했을뿐 아니라 미래를 위해서 ['qgraphicsitem_cast'] (http://doc.qt.io/qt-5/qgraphicsitem.html#qgraphicsitem_cast)를보십시오. – ilotXXI
팁 주셔서 감사. 그것이 내가 모르는 것에 관한 것입니다. – cagem12