Я считаю, что проблема в том, что две метки времени не равны.Если вы проверите код оператора ==
, равный QDateTime
, вы увидите, что равенство выполняется, если время и дата равны.
bool QDateTime::operator==(const QDateTime &other) const
{
if (d->spec == other.d->spec && d->utcOffset == other.d->utcOffset)
return d->time == other.d->time && d->date == other.d->date;
else {
QDate date1, date2;
QTime time1, time2;
d->getUTC(date1, time1);
other.d->getUTC(date2, time2);
return time1 == time2 && date1 == date2;
}
}
Но оператор равенства времени сравнивает миллисекунды:
bool operator==(const QTime &other) const { return mds == other.mds; }
где mds
- время в миллисекундах.В QTime
конструктор mds
рассчитывается следующим образом:
mds = (h*SECS_PER_HOUR + m*SECS_PER_MIN + s)*1000 + ms;
Было бы безопаснее, если бы вы только что проверили, находится ли разница между двумя временными метками в пределах лимита.Например:
while (it != _reminders.end() && abs(now.msecsTo(it.key())) < aLimitInMsecs) {