我正在使用 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(如您所见)检查了各个日期/时间/警报设置( );他们都很好。