Здравствуйте! Пишу игру и столкнулся с одной проблемой.
У меня есть 25 кнопок QPushButton в Ui. Я их поместил в вектор QVector<QPushButton*> buttons. (buttons.push_back(ui->b1);). Когда решил сделать для них connect, то решил сделать это через for(), потом через foreach().
Делаю так:
connect(buttons[i], &QPushButton::pressed, this, [&]() {
doIt(buttons[i]);
});
Приложение запускается, всё работает. Но если нажать на любую кнопку, то вызывается:
ASSERT failure in QVector operator[]: index is out of range
В функции doIt(QPushButton *but) ошибку вызывает but->text().toInt();
А вот если соеденять по очереди из формы, то всё работает:
connect(ui->b1, &QPushButton::pressed, this, [&]() {
doIt(ui->b1);
});
...
connect (ui->b25, &QPushButton::pressed, this, [&]() {
doIt(ui->b25);
});
Скорее всего, вы создаете массив buttons[i] в том же методе, что и производите подключение и массив разрушается при выходе из области видимости. При срабатывание события нажатия на кнопку, выполняет:
doIt(buttons[i]);
Обращение к массиву, который уже разрушен.
Можете попробовать изменить способ захвата переменных, чтоб они передавались по значению:
connect(buttons[i], &QPushButton::pressed, this, [=]() {
doIt(buttons[i]);
});
Очевидный выход индекса за границы вектора в цикле. Покажите код или юзайте foreach.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости