如何从 QGraphicsScene 发出信号?

How to emit signal from QGraphicsScene?

我有一个 QGraphicsScene 子类,如果在 mouseReleaseEvent 上没有选择 QGraphicsItems,我想发出一个信号。

出于某种原因,如果我在我的场景子类中创建一个信号并在 mouseReleaseEvent 中发出它,我会收到一个 link 错误,我以前遇到过,所以我认为你不能发送新信号来自 QGraphicsScene.

另一种解决方案是在 QGraphicsItem 中发出信号,但如果场景中没有任何项目,我将无法发送信号。

我尝试过各种解决方法和技巧,但我想知道是否可以在我的 QGraphicsScene 子类中定义一个新信号并在 mouseReleaseEvent 上发送它。

如果需要我可以粘贴代码,我是这样制作信号的

class Scene : public QGraphicsScene
{
public:
    Scene(QObject* parent = 0);
    ...
signals:
    void nothingSelected();
protected:
    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
    ...
};

并像这样发出信号

void Scene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event){
    QGraphicsScene::mouseReleaseEvent(event);
    if(selectedItems().length() == 0)
        emit nothingSelected();
}

我得到的错误:

1:

scene.obj:-1: error: LNK2019: unresolved external symbol "public: void __cdecl Scene::nothingSelected(void)" (?nothingSelected@Scene@@QEAAXXZ) referenced in function "protected: virtual void __cdecl Scene::mouseReleaseEvent(class QGraphicsSceneMouseEvent *)" (?mouseReleaseEvent@Scene@@MEAAXPEAVQGraphicsSceneMouseEvent@@@Z)

2:

C:\path_to_project\build-app-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug\debug\app.exe:-1: error: LNK1120: 1 unresolved externals

您忘记将 Q_OBJECT 宏添加到 class Scene