В Qt существует так называемый QGamepadManager Class который отвечает за подключение джойстика и получения с него сигналов при нажатии на кнопку или движения триггера.
GamepadMonitor::GamepadMonitor(QObject *parent)
: QObject(parent)
, m_gamepad(0)
{
auto gamepads = QGamepadManager::instance()->connectedGamepads();
if (gamepads.isEmpty()) {
return;
}
m_gamepad = new QGamepad(*gamepads.begin(), this);
connect(m_gamepad, &QGamepad::axisLeftXChanged, this, [](double value){
qDebug() << "Left X" << value;
});
connect(m_gamepad, &QGamepad::axisLeftYChanged, this, [](double value){
qDebug() << "Left Y" << value;
});
connect(m_gamepad, &QGamepad::buttonAChanged, this, [](double value){
qDebug() << "Button A" << value;
});
}
Подскажите, как вместо qDebug() << "Left X" << value; выполнить функцию и передать в нее этот value?
Соедините сигнал с Вашим методом таким образом (если метод не является слотом, то сделайте его таковым):
connect(m_gamepad, SIGNAL(axisLeftXChanged(double)), minimalaladinclien, SLOT(sendJoystickAxisUpdate(double));
Как вариант можно написать так, тогда не придётся изменять класс переменной minimalaladinclien:
connect(m_gamepad, &QGamepad::axisLeftXChanged, this, [this](double value){
minimalaladinclien->sendJoystickAxisUpdate(value);
});
Ну и способ который уже предложил @Arhad, пожалуй, самый правильный, если метод не является слотом:
connect(m_gamepad, &QGamepad::axisLeftXChanged, this, std::bind(&YourClass::sendJoystickAxisUpdate, minimalaladinclien);
Функция bind подключается с помощью include <functional>
Сборка персонального компьютера от Artline: умный выбор для современных пользователей