저는 Qt 플랫폼의 C++ 프로그래머입니다.Qt 또는 다른 언어. 이벤트 루프
궁금한데, 어떻게 이벤트 루프가 이벤트를 보낼 위젯 (주로 마우스/키보드 이벤트)을 "아는"것입니까? 마우스 좌표와 z- 순서를 기반으로 수행됩니까? 키보드의 이벤트는 어떻게됩니까?
감사합니다.
저는 Qt 플랫폼의 C++ 프로그래머입니다.Qt 또는 다른 언어. 이벤트 루프
궁금한데, 어떻게 이벤트 루프가 이벤트를 보낼 위젯 (주로 마우스/키보드 이벤트)을 "아는"것입니까? 마우스 좌표와 z- 순서를 기반으로 수행됩니까? 키보드의 이벤트는 어떻게됩니까?
감사합니다.
이벤트 루프는 알지 못합니다. 이것은 다른 코드 비트에서 수행됩니다.
키보드로 검색하는 용어는 "포커스"입니다. 정확히 하나의 창에 시스템 전체 (또는 다중 사용자 시스템에서 키보드 당 하나 이상의 창)의 포커스가 있습니다. OS는 키 입력을 해당 창에 전달합니다. Qt는 네이티브 윈도우 핸들에서 Qt 객체를 찾습니다. 마찬가지로 마우스 클릭은 대부분 OS에서 처리됩니다.
모르겠다.
이벤트를 캡처하려면 이벤트를 캡처하거나 전달하도록 허용하는 이벤트 필터를 만들어야합니다.
bool OGL_widget::eventFilter(QObject *obj, QEvent *event) {
switch (event->type()) {
case QEvent::KeyRelease:
case QEvent::KeyPress: {
QKeyEvent *key = static_cast<QKeyEvent*> (event);
if (!key->isAutoRepeat())
key_event_queue << *key;
}
break;
case 1001:
case 1002: {
Savestate_event *save = static_cast<Savestate_event*> (event);
save_event_queue << *save;
}
break;
}
return QObject::eventFilter(obj, event);
}
는 Qt는 워드 프로세서에서 events이 잘 쓰여진 기사를 살펴 보자 :
는 여기에 내가 몇 시간 전에 만들어진 아주 간단한 이벤트 필터입니다.