Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Fuelen от Март 28, 2014, 22:02



Название: QHash глючит
Отправлено: Fuelen от Март 28, 2014, 22:02
Есть вот такой код
Код:
for(dim = 1; dim <= ui->dimBox->value() && ui->stopButton->isEnabled(); dim ++)
    {
        for(step = 1; step <= ui->speedBox->value(); step++){
            //spin_motor();
            current_step++;
        }
        //это просто генерируется значение
        float megaval = (current_step*ui->deg_per_stepSpinBox->value()-100)*(current_step*ui->deg_per_stepSpinBox->value()-100)/40+50+(qrand() % 9 - 2);
        data.insert(current_step, megaval);
        QCoreApplication::processEvents();
    }
    //вот тут проверяем то, что только что внесли
    QHashIterator<int, int> i(data);
    while (i.hasNext()) {
         i.next();
         qDebug() << i.key() << "  " << i.value();
    }
}

Так вот, если  ui->speedBox->value() больше единицы, то когда вывожу данные из data, то данные какие-то левые. Сначало думал, что просто перемешиваются, а нет... если  ui->speedBox->value() равно 1, то всё хорошо.
Вот данные ключ-значение, если равно 1
Код:
1    303 
2    304
3    299
4    304
5    300
6    305
7    299
8    297
9    303
10    304
а вот если равно 11
Код:
88    287 
55    294
22    302
110    292
77    290
44    299
11    302
99    293
66    298
33    295

я уже и непосредственно перед записью данные выводил для проверки, входят данные нормальные, выходит мусор.
думал может с циклом что-то не то, тыкал просто несколько раз под ряд current_step++; current_step++; в надежде на чудо ... и дальше мусор.
что я не так делаю?


Название: Re: QHash глючит
Отправлено: OKTA от Март 28, 2014, 22:17
QHash is unordered, so an iterator's sequence cannot be assumed to be predictable. If ordering by key is required, use a QMap.


Название: Re: QHash глючит
Отправлено: kambala от Март 28, 2014, 22:20
ты вставляешь в хэш float, а прочитать итератором пытаешься int


Название: Re: QHash глючит
Отправлено: Fuelen от Март 29, 2014, 07:19
ты вставляешь в хэш float, а прочитать итератором пытаешься int
Если переводить в int перед вставкой, то результат аналогичный.


OKTA, большое спасибо,работает :D