Ошибка ASSERT в QList <T>:: operator []: «индекс вне диапазона» в QJoysticks - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь реализовать библиотеку ввода джойстика для Qt , и большинство работает нормально, а не один. У моего джойстика есть 3 оси. Каждый раз, когда я пытаюсь использовать третью ось, я получаю сообщение об ошибке

ASSERT failure in QList<T>::operator[]: "index out of range", file ../Qt/5.9.3/gcc_64/include/QtCore/qlist.h, line 549

Но с помощью отладчика я смог понять, что по какой-то причине 4-я ось на контроллере имеет индекс e.axis, равный 4. Список, в котором хранится присвоение оси, имеет только 4, что означает, что Индекс 4-й оси выходит за пределы диапазона Списка.

Отладчик покажет мне проблему в этом коде (getInputDevice ...)

void QJoysticks::onAxisEvent (const QJoystickAxisEvent& e)
{
    if (!isBlacklisted (e.joystick->id)) {
        getInputDevice (e.joystick->id)->axes [e.axis] = e.value;
        emit axisChanged (e.joystick->id, e.axis, e.value);
    }
}

qDebug() << getInputDevice (e.joystick->id)->axes; выходит (0, 0, 0)

qDebug() << e.axis; выходит 4

У кого-нибудь есть идея, как я могу это исправить?

1 Ответ

0 голосов
/ 11 июля 2018

У меня была та же проблема.

Однако, если вам не нужна 4-я ось и просто базовое движение 2D-джойстика, просто измените код, чтобы игнорировать 4-ю ось:

void QJoysticks::onAxisEvent (const QJoystickAxisEvent& e)
{
    if (!isBlacklisted (e.joystick->id)) {
        if (e.axis != 4)
        {
            getInputDevice (e.joystick->id)->axes [e.axis] = e.value;
            emit axisChanged (e.joystick->id, e.axis, e.value);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...