Сравниваю containce в QMap показывает ключ есть:
if(!(ctrl->mapIp.contains(ctrl->connectAddr.toIPv4Address())))
return;
Перебираю в цикле QMap, вытаскиваю ключ, но он не равен реальному ключу. Почему так? Как мне вытащить ключ?
QMap<qint32, ClientInfo*>::iterator it = ctrl->mapIp.begin();
for(;it!=ctrl->mapIp.end();it++) {
qDebug() <<"ctrl->connectAddr1=" <<ctrl->connectAddr.toIPv4Address();
qDebug() <<"i1=" <<it.key();
}
Вывод:
ctrl->connectAddr1= 3232235620
i1= -1062731676
если сложить 3232235620
и 1062731676
(без минуса), то будет 4294967296
, то в хексе это будет ровно 0x100000000
, что как бы должно уже намекнуть.
Расширим. Эти два числа - это одно и тоже число, просто в первом случае считаем, что там беззнаковое, а в втором - знаковое. Ключ в мапе у Вас qint32, а функция toIPv4Address имеет следующую сигнатуру quint32 toIPv4Address() const
.
Как бы я исправил? - поменял бы в определении тип. То есть, мапу объявлял так
QMap<quint32, ClientInfo*> mapIp;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как мне посчитать всю сумму значения value? А то есть сложить данные value из всех 3 объектов