对于学校我必须使用Qt为PC创建日历程序, 此日历还必须在某个预约开始之前的某个时间发出通知。
但是我很难找到如何在不使用while循环的情况下完全创建这些通知(这会停止我的程序),如果有人可以帮我一点项目的某些部分,我真的很感激。< / p>
谢谢你, 丹尼斯
答案 0 :(得分:3)
您可以创建一个间隔设置为1秒的QTimer
实例。然后连接到QTimer::timeout()
信号,在插槽中,您可以检查是否有任何约会接近,如下所示:
void YourClass::slotNameForTimeoutSignal()
{
static const int fifteenMinutes = 15 * 60;
foreach (const Appointment& app : allAppoitments)
{
if ((app.getStartUnixTime() - QDateTime::currentDateTime().toTime_t()) <= fifteenMinutes)
{
notifyAboutTheAppointment(app); // implement this method to display notification
}
}
}
此代码假设您有某种Appointment
类/结构,它在开始时保持unixtime。定时器设置很简单。在应用程序初始化的某处创建一个计时器(应该是您班级中的成员字段),设置它并运行:
YourClass::YourClass()
{
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(slotNameForTimeoutSignal()));
timer->setInterval(1000);
timer->setSingheShot(false);
timer->start();
}
如果你还不知道,unixtime是一个时间格式,它是一个整数 - 自1970年初以来经过的秒数。以下是更多细节:http://en.wikipedia.org/wiki/Unix_time
此外,如果您不熟悉Qt中的信号/插槽,那么您应该首先阅读有关Qt文档中的信号/插槽。
答案 1 :(得分:2)
您可以创建GUI的子类QCalendarWidget,即用户可以选择他想要约会的日期。使用QTimer在您的预约时间内触发SIGNAL。
现在,您可以使用QDateTime获取当前日期和时间。
1. Check if the appointment is on the same date as current.
2. If yes jump to step no 4.
3. Set a timer using QTimer to emit a SIGNAL after 24 hours and connect this SIGNAL to your custom SLOT which will check if the current date is same as appointment date. Continue this step until your current date is same as appointment date.
4. Calculate the time difference between your appointment and current time and set this difference to a QTimer which will emit a SIGNAL at the required time.
5. This emitted SIGNAL would be connected a SLOT in which you are doing whatever is needed when the appointment is reached
我希望这能帮助你顺利进入。 给代码就像解决你不想做的功课一样。