我用Qt 创建一个 动态库 ,里面的 普通函数 都可以调到,可是 信号和槽 就不行,提示:C:\Users\xinyi_soft\Desktop\Qt\mydll\mainwindow.cpp:36: error: undefined reference to `Testm::send()'
动态库代码如下:
编译可通过,运行也可以 ,就是不能用 信号和槽。
头文件 .h
#ifndef MY_DLL_TEST_H
#define MY_DLL_TEST_H
#include "my_dll_test_global.h"
#include <iostream>
#include <string>
#include <QObject>
using namespace std;
class Testm:public QObject
{
Q_OBJECT
public:
Testm(QObject *parent=0);
virtual ~Testm();
string func(){ cout<<"test1"<<endl; return "teste1";}
signals:
void send();
public slots:
void receive(){ cout<<"str reveive ......."<<endl; }
};
class MY_DLL_TESTSHARED_EXPORT My_dll_test
{
public:
My_dll_test();
~My_dll_test();
Testm *tm;
};
#endif // MY_DLL_TEST_H
.cpp 文件
#include "my_dll_test.h"
Testm::Testm(QObject *parent)
:QObject(parent)
{
connect(this,SIGNAL(send(string)),this,SLOT(receive(string)));
}
Testm::~Testm()
{
}
My_dll_test::My_dll_test()
{
tm = new Testm;
}
My_dll_test::~My_dll_test()
{
delete tm;
}
#endif // MY_DLL_TEST_H
------解决方案--------------------
connect(this,SIGNAL(send(string)),this,SLOT(receive(string)));
signals:
void send();
public slots:
void receive()
参数都不一致
------解决方案--------------------
没有发出信号的地方,发信号要这样写
emit send();