Ali-RNT Ответов: 1

Проблема с указателем переноса сигнала/слота - qt


Я столкнулся с ошибкой при подключении сигнала к слоту в моем проекте, это:

<pre>error: no matching function for call to ‘QObject::connect(A&, const char [12], Handler&, const char [12])


Мой проект довольно большой, и я не могу опубликовать здесь весь код целиком, но то, что я сделал, это:

У меня есть класс A, который динамически выделяет экземпляр класса B при вызове метода и излучает сигнал, несущий экземпляр B.

В другом классе с именем handler у меня есть слот, который получает объект типа B.

И в основной функции я соединяю их вот так:

подключить(а, сигнал(поменяли(Б*)), обработчик, слот(процесс(Б*)));

Я сделал аналогичную небольшую программу, которая выдает эту ошибку, был бы рад, если бы вы взглянули: здесь

Заранее спасибо.

Что я уже пробовал:

#include <QObject>
#include <QDebug>
#include <QCoreApplication>


class A : public QObject
{
    Q_OBJECT
public:
    void set(int v)
    {
        b = new B(v);
        emit wasSet(b);
    }
    
signals:
    void wasSet(B *b);
    
private:
    B *b;
};

class B
{
public:
    B(int v)
    {
        qDebug() << v;
        qDebug() << "Initialized.";
    }
};

class Handler : public QObject
{
    Q_OBJECT
public slots:
    void handle(B *b)
    {
        qDebug() << "Object handled.";
    }
};

int main(int argc, char* argv[])
{
    QCoreApplication app(argc, argv);
    A a;
    Handler h;
    QObject::connect(a, SIGNAL(wasSet(B*)), h, SLOT(handle(B*)));
    a.set(12);
    return app.exec();
}

1 Ответов

Рейтинг:
9

Jochen Arndt

Взгляните на объявление статики connect функция:

connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
Вы должны передать указатели для отправителя и получателя QObject но вы проходите мимо ссылки:
A a;
Handler h;
QObject::connect(a, SIGNAL(wasSet(B*)), h, SLOT(handle(B*)));
Решение:
QObject::connect(&a, SIGNAL(wasSet(B*)), &h, SLOT(handle(B*)));


Ali-RNT

Ах, действительно спасибо! Я думал, что проблема была в чем-то более серьезном :D