2012-03-21 4 views
2

Qt에서 QEvent 진행을 지연시킬 수있는 방법이 있습니까? 코드의Qt QEvent를 지연시키는 방법이 있습니까?

이 조각은 내가 원하는 무엇을 보여

QList<QEvent*> waited_events; 
...

bool MyQWidget::event(QEvent * event) 
{ 
    if (event->type() == QEvent::KeyPress) 
    { 
     waited_events.append(event); 
     QTimer::singleShot(100, this, SLOT(timer())); 
     return true; 
    } else 
    return QWidget::event(event); 
} 
...

void MyQWidget::timer() 
{ 
    if (!waited_actions.isEmpty()) 
    { 
     QEvent* event = waited_events.takeFirst(); 
     QWidget::event(event); 
    } 
} 

감사합니다!

+0

무엇이 작동하지 않습니까? –

+1

이 방법을 사용할 수 있지만 새 이벤트를 만들어야합니다. QCoreApplication :: postEvent/sendEvent를 사용하여 처리 할 수 ​​있습니다. –

+0

@LucaCarlon'timer()'함수가 호출 될 때까지 그가 저장 한 QEvent * 객체가 파괴 될 것이기 때문에 이것은 작동하지 않을 것입니다. – Chris

답변

0

일반적으로 QWidgets에 의해 트리거되는 QEvents는 저장하지 않으려 고합니다.

QEvent의 처리를 지연하려면 게시 한 코드 단편이 정확해야합니다.

void MyQWidget::timer() 
{ 
    if (!waited_actions.isEmpty()) 
    { 
     QEvent* event = waited_events.takeFirst(); 
     QWidget::event(event); 
    } 
} 

호출되는 당신의 QEvent 이미 삭제 된, 그래서 waited_events는 항상 비어있을 것입니다 그러나, 귀하의 코드는이 때 때문에하고 싶은 일을하지 않습니다.

이 접근 방식을 사용하려면 MyQWidget이 필요하면 F. Osterfeld가 제안한 것과 같은 새로운 이벤트를 만들어야합니다. 나는 100 % 확신하지는 않지만 단지 QEvent::KeyPress을 잡으려고하는 것처럼 보입니다. 이 경우 간단한 방법은 MyQWidgetvoid QWidget::keyPressEvent(QKeyEvent* event)을 덮어 쓰는 것입니다.