graphicsview\qgraphicsview.cpp:1723 中没有这样的信号 Scene::sceneRectChanged(QRectF) [重复]

Posted

技术标签:

【中文标题】graphicsview\\qgraphicsview.cpp:1723 中没有这样的信号 Scene::sceneRectChanged(QRectF) [重复]【英文标题】:No such signal Scene::sceneRectChanged(QRectF) in graphicsview\qgraphicsview.cpp:1723 [duplicate]graphicsview\qgraphicsview.cpp:1723 中没有这样的信号 Scene::sceneRectChanged(QRectF) [重复] 【发布时间】:2015-07-17 10:28:31 【问题描述】:

当我运行应用程序后立即收到此消息时,我正尝试在我的一个班级中使用信号和插槽:

QObject::connect: No such signal Scene::sceneRectChanged(QRectF) in graphicsview\qgraphicsview.cpp:1723

我的类Scene 派生自QGraphicsSceneQObject

为什么控件会在库文件中检查这样的信号?

我实际上没有在我正在建立的任何连接中使用此信号。我的派生类中只有一个名为 void sceneChanged(); 的自定义 SIGNAL

【问题讨论】:

确保你的类声明有Q_OBJECT宏并重新运行qmake。 尝试去掉QObject继承,你应该只继承QGraphicsScene。 @Chernobyl 谢谢!你能把它作为答案发布吗,我会接受的。 Qt 不支持多个QObject 继承。就是这样。 【参考方案1】:

如你所说:

我的场景类派生自 QGraphicsScene 和 QObject

这是问题的根源,因为QGraphicsScene已经是QObject的子类,所以你不需要手动继承QObject。只要删除这个不合适的继承,一切都会好起来的。

关于graphicsview\qgraphicsview.cpp:1723。目前这段代码你可以看到here。

if ((d->scene = scene)) 
      connect(d->scene, SIGNAL(sceneRectChanged(QRectF)),
              this, SLOT(updateSceneRect(QRectF)));

您当然不会使用此信号,但是当您将自定义场景设置为视图时,视图会建立所有需要的连接以便能够为场景提供服务。由于你的错误(多重继承),没有创建信号(sceneRectChanged),所以你得到了这个错误。

【讨论】:

以上是关于graphicsview\qgraphicsview.cpp:1723 中没有这样的信号 Scene::sceneRectChanged(QRectF) [重复]的主要内容,如果未能解决你的问题,请参考以下文章