2015-01-27 3 views
1

이 함수는 qtdlg.cpp의 일부입니다.QT : changeEvent에서 타이머가 작동하지 않지만 timerEvent에서 작동합니다.

void TempCompStart::timerEvent(QTimerEvent *event) 
{ 
} 

내 질문은 ChangeEvent를 가진 첫 번째 경우에 작동하지 않지만 왜 작동한다는 것입니다 : 다음은이 클래스의 생성자입니다 : 내가 사용하는 경우

qtdlg::qtdlg() 
{ 
    timer1.start(100, this); // 100 msec updating 
} 

void qtdlg::changeEvent(QEvent *e) 
{ 
    QWidget::changeEvent(e); 
    switch (e->type()) { 
    case QEvent::LanguageChange: 
     ui.retranslateUi(this); 
     break; 
    case QEvent::Timer: 
     { 
      // do some stuff // it never comes here! 
     } 
     break; 
    default: 
     break; 
    } 
} 

내가 알고 그것을 작동 timerEvent? 이런 식으로 일하는 것을지지하지 않습니까!

+0

어떤 사람들에 여기에 이유없이 downvote 싶습니다! – Samer

답변

0

changeEvent은 상태 변경을 처리합니다. 예를 들어, 윈도우 상태가 변경되거나, 제목이 변경되거나, 로케일이 변경 될 때 호출됩니다. 따라서 주기적으로 timerEvent처럼 호출되지 않습니다.

당신이 그와 같은 타이머 이벤트를 처리 할 경우 다시 구현해야 eventFilter 같은 :

bool qtdlg::eventFilter(QObject *obj, QEvent * event) 
{ 

    if((qtdlg *)obj == this && event->type()==QEvent::Timer) 
    { 
     // do some stuff 
     return true; 
    } 
    return false; 
} 

생성자에서 이벤트 필터를 설치하는 것을 잊지 마십시오

this->installEventFilter(this); 
+0

@Samer 또한'[QObject :: event'] (http://qt-project.org/doc/qt-4.8/qobject.html#event)를 다시 구현할 수 있습니다. 이벤트 필터를 실행하고 개체를 확인하십시오. – thuga