2016-10-31 1 views
0

나는 22시 23 분에 Qt 라이브러리로 매일 같이 특별한 시간에 신호를 보내려고합니다.
나는이 기능 같은 것을 사용하려면 : 내 코드에서 if 문을 사용하여 시간을 확인하지 않으특수 시간으로 신호를 보내기 Qt로 hh : mm

QTimer::singleShot("22:23", this, SLOT(updateCaption())); 

. 내 말은 :

if(time == "22:23") 
    emit mysignal(); 

어떻게 가능합니까?

답변

2

로 호출 할 수 있습니다 물론

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); 
}); 

일일 타이머를 시작하십시오. 시간을 절약 할 수 있습니다.

+1

일광 절약 시간 경계를 넘을 때 해제되는 부분을 수정하려면이 라이브러리를 시간 계산에 사용할 수 있습니다. https://www.youtube .com/watch? v = Vwd3pduVGKY & t = 27m30s 그리고이 라이브러리와'QDate'를 앞뒤로 변환하는 방법을 보여주는 링크가 있습니다 : https://github.com/HowardHinnant/date/wiki/Examples-and-Recipes#QDate 시간대를 포함하도록 전환을 확장하는 것은 간단해야합니다. –

+0

@HowardHinnant, Qt를 사용하는 경우 외부 라이브러리를 사용할 필요가 없습니다. 'QDateTime'은 이미 [DST를 고려] (https://doc.qt.io/qt-5/qdatetime.html#daylight-saving-time-dst)입니다. – Mike

+0

@ 마이크 : 좋습니다. 이 질문의 저자는 다르게 말했고 나는 스스로 확인하기 위해 Qt를 설치하지 않았습니다. DST 경계에서 로컬 시간 산술을 수행하고 올바르게 처리 할 수있는 많은 날짜/시간 라이브러리가 없습니다. 대부분 DST 경계에서 UTC 시간 산술 만 지원합니다. 링크에있는 문서는이 두 작업을 구분하지 않습니다. 무슨 뜻인지 잘 모르겠다면 YouTube 링크를 통해 위의 내용과 직접적으로 다른 점을 설명하고,이 답변에서 사용 된 것과 동일한 기간 (1 일)을 사용합니다 (우연히). –

0

내가 꽤 부드럽고 보이는 간단한 검색을 수행하고이 솔루션을 발견했습니다 당신이 함수를 작성하고, 한 줄 여기

+1

현재 시간 = 22:22 인 경우 22:23에 신호를 보내기 때문에 좋지 않습니다. 1 분마다 신호를 보냅니다. –

+0

@hassanpanahi 실제로, 연결을 대체하여 해결할 수 있습니다. –

관련 문제