Qt 如何从QG发出信号?

Qt 如何从QG发出信号?,qt,qt5,signals-slots,Qt,Qt5,Signals Slots,我有一个QGraphicscene子类,如果在mouseReleaseEvent上没有选择QGraphicsSite,我想发出一个信号,表明这一点 出于某种原因,如果我在我的场景子类中创建一个信号并在mouseReleaseEvent中发出它,我会得到一个链接错误,我以前遇到过这个错误,所以我想你不能从QGraphicscene发送新的信号 另一个解决方案是在QGraphicsItem中发出信号,但是如果场景中没有项目,我就无法发送信号 我尝试过各种解决方法和黑客攻击,但我想知道是否有可能定义一

我有一个QGraphicscene子类,如果在mouseReleaseEvent上没有选择QGraphicsSite,我想发出一个信号,表明这一点

出于某种原因,如果我在我的场景子类中创建一个信号并在mouseReleaseEvent中发出它,我会得到一个链接错误,我以前遇到过这个错误,所以我想你不能从QGraphicscene发送新的信号

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

我尝试过各种解决方法和黑客攻击,但我想知道是否有可能定义一个新的信号并在mouseReleaseEvent上发送,所有这些都在我的QGraphicscene子类中

如果需要,我可以粘贴代码,我会这样做

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();
}
然后像这样发出信号

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:

2:


您忘记将
Q_OBJECT
宏添加到
class Scene

不,我确实在某一点上包含了它,但它只是产生了更多的错误,这就是为什么我认为Scene不能成为对象的原因,但现在我记得每次添加该宏时都需要清理、制作和构建。无论如何,谢谢你。