Я переношу свое приложение с Qt4 на Qt5.
Насколько мне известно, Qt5 больше не поддерживает обработку событий Xlib и использует события XCB (обработчик событий получает объект xcb_generic_event_t
). Однако библиотека spnav
, которую я использую, поддерживает только события X11 (она анализирует объект XEvent
для получения необходимой информации). Можно ли обрабатывать события X11 в Qt5 или конвертировать xcb_generic_event_t
в XEvent
?
В Qt4 код выглядел так:
bool MyApplication::x11EventFilter(XEvent *event)
{
spnav_event sev;
spnav_x11_event(event,&sev);
if(sev.type == SPNAV_EVENT_MOTION)
{
emit joystickPositionEvent(sev.motion.x,sev.motion.y,sev.motion.z,sev.motion.rx,sev.motion.ry,sev.motion.rz);
}
else if(sev.type == SPNAV_EVENT_BUTTON)
{
emit joystickButtonEvent(sev.button.bnum,sev.button.press!=0);
}
return false;
}
bool QAbstractNativeEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *result)
.void* message
на самом деле является указателем наxcb_generic_event_t
, и я не могу получить полезную информацию из этого типа объекта. - person Lecko   schedule 30.03.2016XEvent
изxcb_generic_event_t
. - person Kuba hasn't forgotten Monica   schedule 30.03.2016