私は問題は2つのタイムスタンプが等しくないということであると信じている。あなたは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;
}
}
しかし、時間が等しいoperat mds
はミリ秒単位の時間である
bool operator==(const QTime &other) const { return mds == other.mds; }
:またはミリ秒を比較します。 QTime
コンストラクタでmds
は、次のように計算されます。
mds = (h*SECS_PER_HOUR + m*SECS_PER_MIN + s)*1000 + ms;
それはあなたがちょうど2つのタイムスタンプ間の差が限度内であればチェックすると、より安全になります。例:
while (it != _reminders.end() && abs(now.msecsTo(it.key())) < aLimitInMsecs) {
検索項目または有効な項目の後に "_reminders.end()"を指していますか? – Koying
ループに入る前に 'it == _reminders.end()'の条件を調べました。ループが決して実行されないのは、真実です。しかし、なぜ? 'QDateTime'の比較演算子はこれと何か関係がありますか? – Pieter