qt和libbluedevil:没有这样的插槽

时间:2012-01-01 19:46:04

标签: c++ qt

我正在尝试连接到BlueDevil::Manager::devicesChanged,但是当我运行程序时出现错误Object::connect: No such slot Handler::changed(QList<Device*>) in src/handler.cpp:26如何解决此错误?据我所见,改变后的类型正确。

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*>)));

}

1 个答案:

答案 0 :(得分:1)

尝试:

connect(defaultAdapter, SIGNAL(devicesChanged(QList<BlueDevil::Device*>)),
        this, SLOT(changed(QList<BlueDevil::Device*>)));

SIGNALSLOT是宏,它们实际上不能识别名称空间。

如果不起作用,请尝试:

connect(defaultAdapter, SIGNAL(devicesChanged(QList<Device*>)),
        this, SLOT(changed(QList<BlueDevil::Device*>)));

...如果这不起作用,您必须将using namespace BlueDevil;放入标题中,并使用以下内容声明您的广告位:

void changed(const QList<Device*> &devices);

并使用您的原始连接。这有点难过。