对象::连接:当 obj 作为shared_ptr返回时没有这样的信号
Object::connect: No such signal when obj is returned as shared_ptr
使用Qt的信号和插槽,我得到错误:
Object::connect: No such signal FvOverlayPolygon::mouseHoveredOnElemSig(rf::AbstractFvOverlay*)
我的其他connect
工作正常,我已经检查了我能想到的所有内容(参考了 20 种调试 Qt 信号和插槽的方法)。因为我个人第一次使用shared_ptr
Qt
这个样本,所以我怀疑我使用shared_ptr
的方式可能有问题。我非常感谢您的意见。
具体Fv覆盖.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*)));
}
}
此叠加层实例化如下:抽象FvOverlay.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 允许)。
即使在同一作用域中,也必须在信号声明中使用类型的完整作用域名称。将信号void mouseHoveredOnElemSig(AbstractFvOverlay *i);
替换为void mouseHoveredOnElemSig(rf::AbstractFvOverlay *i);
或在连接中使用不带范围的AbstractFvOverlay。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- Qt VTK交互风格的信号到小部件
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- 如何使用 qt 中的信号槽控制函数的返回
- 在Qt中,如何延迟成员函数的返回,直到收到信号?
- 发布信号量返回错误 6(无效句柄)
- Linux x64堆栈在信号处理程序内部展开,以修改返回地址
- 这是从信号处理程序返回值的可靠方法吗
- 对象::连接:当 obj 作为shared_ptr返回时没有这样的信号
- 将返回对象的信号连接到没有参数的插槽
- 打开时的QSerialPort错误信号,但打开返回true
- 带有返回值的信号/插槽不起作用
- QThread发出finished()信号,但isRunning()返回true, isFinished()返回fals
- 根据信号和返回地址改变程序执行流程
- Qt(c++)-是否可以使用信号从方法返回