Seite 1 von 1

x11Event

Verfasst: 10. Oktober 2005 20:16
von pumbah
Hi @ forum,

sieht irgendjemand einen offensichtlichen Fehler in folgendem Codestück?

Code: Alles auswählen


void myWidget::keyPressEvent ( QKeyEvent * e ) {
     cout << e->text() << endl;
}

bool myWidget::x11Event ( XEvent * xe) {
   // QWidget::x11Event( XEvent * )
   char buffer[20];
   int bufsize = 20;
   XComposeStatus compose;
   KeySym keysym;
   int charcount;

   switch(xe->type) { 
   case KeyPress:
     charcount = XLookupString((XKeyEvent*) xe, buffer, bufsize, &keysym, &compose);
     cout << "keysym: " << keysym << endl;
     cout << "buffer: " << buffer << endl;
     break;
   case MappingNotify:
     //XRefreshKeyboardMappint(xe); // Keyboard was remapped!
     break;
   }
   //return FALSE;
}

Folgender Code sollte den KeyPressEvent verarbeiten und den entsprechenden Keycode bzw. KeySym (Key Symbol unter x11) liefern. Das ganze sollte geschehen, bevor der Event an die Eventverarbeitung von qt weitergereicht wird. Das geschieht dann, wenn FALSE zurückgegeben wird.

Leider führt es dazu, dass offenbar die switch-Anweisung gar nicht durchlaufen wird und der Event nur von qt verabeitet wird ( s.o. keyPressEvent ).

Wird 'FALSE' nicht zurückgegeben, dann wird kein Event mehr von QT verarbeitet. Das zeigt sich z.B. darin, dass ein Klick auf das x in der Fensterleiste nichts bewirkt. Allerdings wird dann die switch-Anweisung durchlaufen und die untere Funktion verabreitet den Event.

Leuchtet mir auf Anhieb nicht ein!?

xlib-docu gibt es hier: http://tronche.com/gui/x/xlib/introduction

cu,

pumbah

Re: x11Event

Verfasst: 11. Oktober 2005 07:12
von macman
Probier's mal mit xe->type() in der switch-Anweisung.

Verfasst: 11. Oktober 2005 18:07
von pumbah
XEvent ist eine Struktur, insofern dürfte das nichts ändern. Aber versuchen werde ichs.

cu,

pumbah

Verfasst: 12. Oktober 2005 07:24
von macman
Ups, überlesen. XEvent gibt es bei mir nicht, aber beim winEventFilter ist es ähnlich. Hast Du denn inzwischen eine Lösung gefunden?