2012-04-11 53 views
0

我有几个QGraphicsScene子类“CustomScene”都来自包含虚函数cut(),copy(),paste()和delete()的通用接口。 QGraphicsScene是超类,它由CustomSceneInterface继承,由CustomScene继承。每个CustomScenes都显示在主窗口的单独QGraphicsViews中。我也有剪切,复制,粘贴和删除的QActions。如何将信号转发到最后点击的QGraphicsScene

我无法弄清楚如何将QAction信号发送到上次点击的任何一个CustomScene(或具有“焦点”的任何一个)。

我该怎么做?

回答

1

我意识到我可以将QAction信号发送到插槽,检查哪个QGraphicsView已经对焦,然后调用其场景的适当方法。我需要拨打

QWidget::setFocusPolicy(Qt::ClickFocus) 

对QGraphicsViews才能正常工作。如果有人能想出更好的解决方案,请告诉我。

编辑:

随着QT5并能够使用lambda表达式作为插槽,我现在可以使用一个相当漂亮的办法。首先,我制作了一个功能lastClickedScene(),它返回最后一次点击的场景。然后我做connect(actionCut, &QAction::triggered, [=]{lastClickedScene->cut();})