Qt のシグナルとスロットを使用すると、エラーが発生します。
Object::connect: No such signal FvOverlayPolygon::mouseHoveredOnElemSig(rf::AbstractFvOverlay*)
私の他connect
のものは正常に動作し、考えられるすべてをチェックしました(Qtシグナルとスロットをデバッグする20の方法も参照)。shared_ptr
個人的にforはこのサンプルで初めて使用するのでQt
、使い方に問題があるのではないかと思います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 が許可する具象クラス)。