Qt 5 No such signal

Разрабатывается приложение, которое будет чем-то вроде панели управления. К устройству подключается джойстик и далее по алгоритму. На текущем этапе, для тестирования, пытаюсь вывести значения осей на поля интерфейса. Получение данных от usb решил вынести в отдельный поток, оформил класс под это дело, закинул в joyhid.h:

#ifndef JOYHID_H
#define JOYHID_H

#include <QObject>
#include <cstdint>
#include "hidapi.h"

typedef struct _HID_JOYSTK_Info
{
    uint16_t              X;
    uint16_t              Y;
    uint16_t              Z;
    uint16_t              X_low;
    uint16_t              Y_low;
    uint8_t               buttons[5];
}
HID_JOYSTK_Info_TypeDef;

class JoyHID : public QObject
{
    Q_OBJECT

public:
    explicit JoyHID(QObject *parent = nullptr);

public slots:
    void joySlot();

signals:
    void joySignal(HID_JOYSTK_Info_TypeDef *obj);

private:
    void joyHIDUpdate(HID_JOYSTK_Info_TypeDef *obj);
};

#endif // JOYHID_H

Прописал слоты, сигналы, структура предназначается для хранения и дальнейшего использования. В mainwindow.h добавил слот для приема сигнала от класса джойстика:

public slots:
    void uiSlot(HID_JOYSTK_Info_TypeDef *obj);

В mainwindow.cpp пытаюсь это все заставить работать следующим образом:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QThread *joy_thread = new QThread;
    JoyHID *joystck = new JoyHID;
    joystck->moveToThread(joy_thread);
    connect(joystck, SIGNAL(joySignal(HID_JOYSTK_Info_TypeDef)), this, SLOT(uiSlot(HID_JOYSTK_Info_TypeDef)));
    connect(joy_thread, SIGNAL(started()), joystck, SLOT(joySlot()));
    joy_thread->start();
}

Проект собирается и запускается, но во время запуска, в консоли, вижу вот это:

QObject::connect: No such signal JoyHID::joySignal(HID_JOYSTK_Info_TypeDef) in ..\display\mainwindow.cpp:15
QObject::connect:  (receiver name: 'MainWindow')

И никак до меня не может дойти, в чем тут проблема. До этого пару раз ошибался с сигнатурами, либо что-то забывая, либо просто опечатываясь, однако здесь что-то иное, буду рад услышать от знающих, в чем может быть проблема


Ответы (1 шт):

Автор решения: Bearded Beaver

У вас тип параметра в сигнале HID_JOYSTK_Info_TypeDef *, а вы написали HID_JOYSTK_Info_TypeDef.

Для избежания таких ошибок лучше используйте "новый" (в кавычках потому что он появился без малого 10 лет назад) синтаксис соединения, он осуществляет проверку сигнатур в компайлтайме, а не в рантайме как старый:

connect(joystck, &JoyHID::joySignal, this, &MainWindow::uiSlot);
→ Ссылка