我需要知道从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
,或者在构造函数中定义连接是个坏主意。
答案 0 :(得分:4)
SIGNAL
和SLOT
是宏,因此是基于文本的处理,这使得它们非常挑剔。 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。