로 호출 할 수 있습니다 물론
QDateTime now = QDateTime::currentDateTime();
QDateTime timeoftheaction = ...;
QTimer *timer=new QTimer;
connect(timer, SIGNAL(timeout()),object,SLOT(action);
timer->start(now.secsTo(timeoftheaction)*1000);
입니다 어떻게 좋겠 이 작업을 수행.
먼저 신호를 방출 할 다음의 날짜 수 :
auto then = QDateTime::currentDateTime();
auto setTime = QTime::fromString("22:23", "hh:mm");
if(then.time() > setTime){
then = then.addDays(1);
}
then.setTime(setTime);
지금
auto diff = QDateTime::currentDateTime().msecsTo(then);
에서 시간 차이를 계산하고 그 시간에 SINGLESHOT 타이머를 시작을,에 정기적 인 일일 타이머를 시작하십시오 :
QTimer::singleShot(diff, [this]{
auto t = new QTimer(QCoreApplication::instance());
connect(t, &QTimer::timeout, [this]{
emit mysignal();
});
t->start(24 * 3600 * 1000);
});
일일 타이머를 시작하십시오. 시간을 절약 할 수 있습니다.
일광 절약 시간 경계를 넘을 때 해제되는 부분을 수정하려면이 라이브러리를 시간 계산에 사용할 수 있습니다. https://www.youtube .com/watch? v = Vwd3pduVGKY & t = 27m30s 그리고이 라이브러리와'QDate'를 앞뒤로 변환하는 방법을 보여주는 링크가 있습니다 : https://github.com/HowardHinnant/date/wiki/Examples-and-Recipes#QDate 시간대를 포함하도록 전환을 확장하는 것은 간단해야합니다. –
@HowardHinnant, Qt를 사용하는 경우 외부 라이브러리를 사용할 필요가 없습니다. 'QDateTime'은 이미 [DST를 고려] (https://doc.qt.io/qt-5/qdatetime.html#daylight-saving-time-dst)입니다. – Mike
@ 마이크 : 좋습니다. 이 질문의 저자는 다르게 말했고 나는 스스로 확인하기 위해 Qt를 설치하지 않았습니다. DST 경계에서 로컬 시간 산술을 수행하고 올바르게 처리 할 수있는 많은 날짜/시간 라이브러리가 없습니다. 대부분 DST 경계에서 UTC 시간 산술 만 지원합니다. 링크에있는 문서는이 두 작업을 구분하지 않습니다. 무슨 뜻인지 잘 모르겠다면 YouTube 링크를 통해 위의 내용과 직접적으로 다른 점을 설명하고,이 답변에서 사용 된 것과 동일한 기간 (1 일)을 사용합니다 (우연히). –