QGraphicsScene selectionChanged()事件

时间:2017-11-20 11:03:07

标签: c++ qt

我需要知道从QGraphicItem中选择Scene的时间。我正在使用方法selectionChange()中的信号,但这没有做任何事情。这是我的代码:

scene.h

class Scene : public QGraphicsScene{
public:
    Scene(QGraphicsScene *scene = 0);
    ~Scene();
private slots:
    void test();
};

scene.cpp

Scene::Scene(QGraphicsScene* scene):QGraphicsScene(scene)
{
    connect(this, SIGNAL(QGraphicsScene::selectionChanged()), this, SLOT(test()));
}

void Scene::test() {
    qDebug() << "I'm here ";
}

我想问题是我的场景继承自QGraphicScene,或者在构造函数中定义连接是个坏主意。

2 个答案:

答案 0 :(得分:4)

SIGNALSLOT是宏,因此是基于文本的处理,这使得它们非常挑剔。 assert通常一个好主意是你所有的联系都成功了。在您的情况下,问题是无关的资格。放弃它:

connect(this, SIGNAL(selectionChanged()), this, SLOT(test()));

答案 1 :(得分:2)

如@Angew所述,问题在于传递给SIGNAL宏的文本。

如果您使用的是Qt 5,首选方法是使用较新的连接语法,这可以从编译时错误检查中获益

connect(this, &GraphicsScene::SelectionChanged, this, &Scene::Test);

此连接方法使用函数的地址,这具有能够连接到尚未声明为SLOT的函数的额外好处。但是,可能仍需要定义插槽as discussed here