我從QGraphicsView和QGraphicsRectItem派生。我在這兩個類上重載了contextMenuEvent以提供彈出菜單。當你點擊一個項目時,點擊QGraphicsItem彈出式菜單的空白處時,我想要QGraphicsView上下文菜單。Qt:從QGraphicsView傳遞QGraphicsSceneContextMenuEvent
在第一次實現中,無論點擊哪個位置,我都會看到QGraphicsView彈出窗口。所以我修改了的ContextMenuEvent如下:
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
}
}
爲QGraphicsSceneContextMenuEvent的dynamic_cast的失敗,所以我從來不叫的ContextMenuEvent爲矩形。如果我只是嘗試將事件傳遞給rect-> contextMenu(),它就不會編譯,所以我嘗試了演員。
這樣做的正確方法是什麼?
這是一個使用Qt創建/移動/旋轉/刪除2D圖形的學習項目。如果有人想看看整個事情,請告訴我。
http://www.cplusplus.com/doc/tutorial/typecasting/#dynamic_cast說:「dynamic_cast只能用於指針和類的引用(或void *)。」這可能值得一讀。 – 2016-07-30 15:53:48
您已經回答了您的問題,但也請看['qgraphicsitem_cast'](http://doc.qt.io/qt-5/qgraphicsitem.html#qgraphicsitem_cast),以備將來。 – ilotXXI
感謝您的提示。那是我不知道的。 – cagem12