2012-08-12 3 views
0

은 Qt의 신호 & 슬롯을 사용하기로 반환됩니다 그러한 신호, 나는 오류 얻을 (20 ways to debug Qt signals and slots도 참조). 이 샘플에서는 개인적으로 처음으로 shared_ptrQt으로 사용하기 때문에, 내가 사용하는 방법에 뭔가 문제가있을 수 있습니다. shared_ptr. 나는 정말로 당신의 의견에 감사드립니다.개체 : : 연결 :</p> <pre><code>Object::connect: No such signal FvOverlayPolygon::mouseHoveredOnElemSig(rf::AbstractFvOverlay*) </code></pre> <p>내 다른 <code>connect</code>의 잘 작동하고 내가 생각할 수있는 모든 것을 확인했습니다 obj가 shared_ptr의


concreteFvOverlay.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)); 
} 

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에서 허용하는 구체적인 클래스에서 설명합니다.)

답변

0

동일한 범위에 있더라도 신호 선언에 전체 범위 이름 유형을 사용해야합니다. 신호 void mouseHoveredOnElemSig(AbstractFvOverlay *i);void mouseHoveredOnElemSig(rf::AbstractFvOverlay *i);으로 바꾸거나 연결에 범위가없는 AbstractFvOverlay를 사용하십시오.

+0

당신이 제안한 것이 실제로 효과가 없었습니다. 그러나 AbstractFvOverlay 클래스에 대한 네임 스페이스 선언을 제거하면 연결이 완료됩니다 (이상적인 해결 방법은 아닙니다 ... 나중에 더 깊이 이해 하겠지만). 그것은 심지어 shared_ptr과 관련이 없습니다 ... 통찰력을 주셔서 감사합니다. – IsaacS