【发布时间】:2016-08-25 15:31:07
【问题描述】:
以下情况:
我在 DLL A 中有一个类(Parent),它有一个信号(这是最终的)。我在 DLL B 中有一个继承自 A 的类 (Child)。我将两个 DLL 都导入到我的项目中。然后我的项目中有一个类获取Child 类的实例,并尝试将Child 实例的信号连接到当前对象。不知何故,这种连接失败了。在调试模式下运行整个事情只会给我:QObject::connect: signal not found in Child。检查转储箱显示信号在 DLL A 中,但不在 DLL B 中。Parent 类和Child 类都有正确的导出语句,但不知何故,Child 类的信号没有得到出口。这是代码的全部内容:
a.dll:
class DLLA_SHAREDEXPORT ParentInterface{
public:
~ParentInterface(){}
virtual void test() = 0;
};
Q_DECLARE_INTERFACE(ParentInterface, "ParentInterface")
class DLLA_SHAREDEXPORT Parent : public QObject,
public ParentInterface{
Q_OBJECT
Q_INTERFACES(ParentInterface)
...
signals:
void test();
}
b.dll:
class DLLB_SHAREDEXPORT Child : public Parent{
Q_OBJECT
...
}
项目中的类:
class SomeClass : public QObject{
Q_OBJECT
public:
...
void someFunction(){
Parent* c = getChildObject(); //some call to get the Object of class Child
QObject::connect(c, &Parent::test,
this, &SomeClass::handle_test);
//QObject::connect: signal not found in Child
}
}
public slots:
void handle_test(){
//do something
}
}
所以问题似乎出在某个地方,是 DLL B 中所有内容的正确导出,但我不知道该怎么做。任何帮助将不胜感激。
【问题讨论】: