Я пишу простой планировщик задач и напоминание, используя 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()
почему-то никогда не выполняется. Я даже проверил индивидуальную настройку даты / времени / будильника (t.ala
) с помощью qDebugs (как вы можете видеть); они все в порядке.