qt и libbluedevil: нет такого слота - PullRequest
0 голосов
/ 01 января 2012

Я пытаюсь подключиться к 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 Ответ

1 голос
/ 01 января 2012

Попробуйте с:

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

и используйте исходное соединение. Это немного грустно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...