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

时间:2012-01-16 16:35:59

标签: qt datetime qthread phonon

我正在编写一个简单的任务规划器和使用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 for\n"
                                         + 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);
    }
}  

问题在于线程运行正常,但if()循环内的foreach()条件由于某种原因永远不会满足。我甚至使用qDebugs检查了单​​独的日期/时间/闹钟设置(t.ala)(如您所见);他们都很好。

1 个答案:

答案 0 :(得分:2)

您的if声明要求日期和时间完全匹配,直到毫秒。您的循环不太可能在此时刻进行评估。如果你想保持类似的逻辑(在一个循环中处理任务),你可以尝试先按&#34;下一个任务排序&#34; (或者可能使用队列),然后在if语句中测试当前QDateTime是否等于或更大,而不是第一个任务日期/时间任务。