qt和libbluedevil:没有这样的插槽

qt and libbluedevil: No Such slot

本文关键字:插槽 libbluedevil qt      更新时间:2023-10-16

我正在尝试连接到BlueDevil::Manager::devicesChanged,但是当我运行我的程序时,我得到错误Object::connect: No such slot Handler::changed(QList<Device*>) in src/handler.cpp:26,我该如何修复此错误?据我所知,change的类型是正确的。

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

Try with:

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

,并使用原来的连接。