은 Qt의 신호 & 슬롯을 사용하기로 반환됩니다 그러한 신호, 나는 오류 얻을 (20 ways to debug Qt signals and slots도 참조). 이 샘플에서는 개인적으로 처음으로 shared_ptr
을 Qt
으로 사용하기 때문에, 내가 사용하는 방법에 뭔가 문제가있을 수 있습니다. 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에서 허용하는 구체적인 클래스에서 설명합니다.)
당신이 제안한 것이 실제로 효과가 없었습니다. 그러나 AbstractFvOverlay 클래스에 대한 네임 스페이스 선언을 제거하면 연결이 완료됩니다 (이상적인 해결 방법은 아닙니다 ... 나중에 더 깊이 이해 하겠지만). 그것은 심지어 shared_ptr과 관련이 없습니다 ... 통찰력을 주셔서 감사합니다. – IsaacS