qt和libbluedevil:没有这样的插槽
问题描述:
我想连接到BlueDevil::Manager::devicesChanged
,但是当我运行我的程序时出现错误Object::connect: No such slot Handler::changed(QList<Device*>) in src/handler.cpp:26
我该如何解决这个错误?据我所知,改变了正确的类型。qt和libbluedevil:没有这样的插槽
main.cpp中:
#include <QApplication>
#include "handler.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
Handler handler;
return app.exec();
}
handler.h中:
#include <bluedevil/bluedevil.h>
#include <iostream>
#include <QObject>
class Handler : public QObject
{
Q_OBJECT
public:
Handler();
public Q_SLOTS:
void changed(const QList<BlueDevil::Device*> &devices);
private:
BlueDevil::Manager *manager;
BlueDevil::Adapter *defaultAdapter;
};
handler.cpp
#include <bluedevil/bluedevil.h>
#include <iostream>
#include <QObject>
#include "handler.h"
using namespace BlueDevil;
void Handler::changed(const QList<Device*> &devices)
{
Q_FOREACH (const Device *device, devices)
{
std::cout << qPrintable(device->friendlyName()) << std::endl;
}
}
Handler::Handler() : QObject()
{
manager = Manager::self();
defaultAdapter = manager->defaultAdapter();
connect(defaultAdapter, SIGNAL(devicesChanged(QList<Device*>)),
this, SLOT(changed(QList<Device*>)));
}
答
尝试用:
connect(defaultAdapter, SIGNAL(devicesChanged(QList<BlueDevil::Device*>)),
this, SLOT(changed(QList<BlueDevil::Device*>)));
SIGNAL
和SLOT
是宏,它们不能真正是名称空间感知的。
如果还是不行,请尝试:
connect(defaultAdapter, SIGNAL(devicesChanged(QList<Device*>)),
this, SLOT(changed(QList<BlueDevil::Device*>)));
...如果不工作,你得把using namespace BlueDevil;
在你的头,并与您的声明插槽:
void changed(const QList<Device*> &devices);
并使用您的原始连接。这有点难过。
如果我将其更改为'BlueDevil :: Device',我在src/handler.cpp中得到'Object :: connect:No such signal BlueDevil :: Adapter :: devicesChanged(QList): 23' –
brennie
2012-01-01 20:00:13
增加第二个选项,可以工作取决于BlueDevil文件的处理方式。 – Mat 2012-01-01 20:15:21
'QObject :: connect:不兼容的发送者/接收者参数 BlueDevil :: Adapter :: devicesChanged(QList) - > Handler :: changed(QList )' –
brennie
2012-01-01 20:39:35