无法匹配Qt中的当前日期和时间



我正在使用Qt编写一个简单的任务计划器和提醒,当任何给定任务的日期和时间和当前日期和时间匹配时,它将播放一个声音文件。

为了实现这一点,我运行了一个QThread,它检查列表中的任务是否与当前时间匹配,如果匹配,则播放声音文件。

这是我原来的班级:

class Task
{
  public:
      QString ta, desc;
      QTime ti;
      QDate da;
      int pri, diff;
      bool ala;
};  

这是我的线程类:

class AlarmCheck : public QThread
{
  public:
      void setTask(QList<Task>);
      void run();
      bool isRunning;
      QString music;
      QTime alarmOffset;
  private:
      QList<Task> list;
};

我的实现:

void AlarmCheck::setTask(QList<Task> l)
{
    list = l;
}
void AlarmCheck::run()
{
    while(isRunning)
    {
        foreach(Task t, list)
        {
            if((t.da == QDate::currentDate()) && (t.ti == QTime::currentTime()) && t.ala)
            {
                Phonon::MediaObject *gaana =
                        Phonon::createPlayer(Phonon::MusicCategory,
                                              Phonon::MediaSource(music));
                gaana->play();
                QMessageBox::information(NULL,
                                         "Alarm!!!",
                                         "The time has come forn"
                                         + t.ta +
                                         "n Time to do it!");
                gaana->stop();
            }
            qDebug("Curr = " + QTime::currentTime().toString().toAscii() + " Date = " + QDate::currentDate().toString().toAscii());
            qDebug("Task = " + t.ti.toString().toAscii() + " Date = " + t.da.toString().toAscii());                
        }
        sleep(1);
    }
}  

问题是线程运行得很好,但由于某种原因,foreach()循环内的if()条件从未得到满足。我甚至使用qDebugs检查了单个日期/时间/警报设置(t.ala)(如您所见);他们都很好。

您的if语句要求日期和时间与完全匹配,精确到毫秒。您的循环不太可能在这个确切的时刻进行评估。如果您想保持类似的逻辑(在循环中处理任务),可以尝试按"下一个任务优先"(或者可能使用队列)对它们进行排序,然后在if语句中测试当前QDateTime是否等于-或大于第一个任务的任务日期/时间

相关内容

  • 没有找到相关文章

最新更新