0

使用 Qt 的信号和插槽,我得到错误:

Object::connect: No such signal FvOverlayPolygon::mouseHoveredOnElemSig(rf::AbstractFvOverlay*)

connect的其他工作正常,我已经检查了我能想到的所有内容(也提到了调试 Qt 信号和插槽的 20 种方法)。因为我个人是第一次使用shared_ptrforQt这个示例,我怀疑我的使用方式可能有问题shared_ptr。我非常感谢您的意见。


具体FvOverlay.cpp

#include "rf_common/abstractFvOverlay.h"

void FvScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
  rf::AbstractFvOverlay::Ptr item_overlay;
  item_overlay = this->createOverlay(myItemMenu, &pixmap_overlay); // this inherits Class A

  bool con1 = connect(item_overlay.get(), SIGNAL(mouseHoveredOnElemSig(rf::AbstractFvOverlay*)), this, SLOT(mouseHoveredOnElem(rf::AbstractFvOverlay*)));
  }
}

此覆盖在此实例化:abstractFvOverlay.cpp

boost::shared_ptr<rf::AbstractFvOverlay> FvPolygonScene::createOverlay(QMenu *menu, QPixmap *pixmap_overlay)
{
  return boost::shared_ptr<rf::AbstractFvOverlay>(new FvOverlayPolygon(menu, *pixmap_overlay));
}

覆盖.h

#include <QGraphicsItem>
#include <boost/shared_ptr.hpp>

class AbstractFvOverlay : public QObject, public QGraphicsItem
{
Q_OBJECT

public:
  AbstractFvOverlay(QMenu *contextMenu, QGraphicsItem *parent, QGraphicsScene *scene);
  virtual ~AbstractFvOverlay();
  typedef boost::shared_ptr<AbstractFvOverlay> Ptr;

signals:
  void mouseHoveredOnElemSig(AbstractFvOverlay *i);

为了您的兴趣,我shared_ptr在这里使用的原因是我想做基于接口的编程(不确定这是否是调用这种风格的官方方式,但我的意思是定义抽象类中的行为,并且只针对我描述它们的某些行为Java 允许的具体类)。

4

1 回答 1

0

即使您在同一范围内,也必须在信号声明中使用类型的完整范围名称。void mouseHoveredOnElemSig(AbstractFvOverlay *i);在连接中没有范围的情况下用AbstractFvOverlay替换信号void mouseHoveredOnElemSig(rf::AbstractFvOverlay *i);或使用 AbstractFvOverlay。

于 2012-08-12T23:49:17.920 回答