2010-09-15 12 views
1

Je suis coincé au milieu de ce problème depuis environ une semaine, j'ai trouvé une question similaire sur Qt for Symbian forum, mais personne n'y a répondu. Le problème est simplement que lorsque j'exécute l'application, ce n'est toujours pas une application juste un prototype :), soit sur l'émulateur ou sur un périphérique réel, et utiliser le clavier physique QWERTY pour taper des caractères normaux, dans dans ce cas l'appareil est en orientation paysage, la fonction keyPressEvent n'est pas appelée, mais elle s'appelle si j'ai appuyé sur des touches telles que enter, backspace, différentes flèches et la touche d'action. Cela se produit également si j'exécute l'application sur l'émulateur et utilise le clavier de la machine de développement pour taper. Par contre, si j'ai utilisé le mini clavier QWERTY à l'écran sur l'émulateur, ou si j'ai utilisé le clavier de la machine à développer et que l'émulateur est en mode portrait, la fonction keyPressEvent est appelée. Maintenant, pour être plus précis, j'ai une classe qui hérite de QTextEdit, je remplace les fonctions keyPressEvent et focusInEvent à l'intérieur, aussi j'appelle la fonction setFocusPolicy dans le constructeur de la classe, mais rien ne semble résoudre le problème.Problème avec keyPressEvent sur l'application Nokia N97 Qt

Aussi je dois dire que le code que j'essaye est une version modifiée de l'exemple customcompleter, et a trouvé que ce problème arrive également avec le code original.

Alors les gars, quelqu'un a une idée sur la façon de résoudre ce problème?

Cordialement.

Répondre

1

Vous pouvez vérifier keyReleaseEvent et/ou surveiller tous les événements en remplaçant event(QEvent*) et en vérifiant exactement quels événements sont effectivement générés. Un événement approprié différent peut être généré. Cependant, le comportement que vous avez décrit ressemble vraiment à un bug pour moi. Vous pouvez vérifier le Qt Bug Tracker et/ou déposer un rapport de bogue.

+0

Kaleb, merci beaucoup, je ne sais pas comment cela m'est jamais venu à l'esprit d'essayer cette fonction !! Maintenant, cette fonction est appelée quand j'appuie sur n'importe quelle touche, mais il y a encore quelques problèmes, donc j'ai pensé à l'évènement override (QEvent *) dans ma sous-classe, mais ça ne s'appelle pas du tout, alors tu as une idée? est-ce?? – Ayman

+0

'event (QEvent *)' est le répartiteur d'événements principal pour tous les QWidgets. Il sera donc appelé si votre widget gère les événements. Si vous ne voyez pas d'événements et que votre widget reçoit effectivement des événements, vérifiez que vous avez la bonne signature. –

+0

Eh bien, voici le code de ma classe classe MyWidget: QTextEdit publique { Q_OBJECT public: MyWidget (QWidget * parent = 0); void keyPressEvent (événement QKeyEvent *); void keyReleaseEvent (événement QKeyEvent *); événement booléen (événement QKeyEvent *); }; MyWidget :: MyWidget (parent QWidget *): QTextEdit (parent) { setText ("Hola"); } void MyWidget :: keyPressEvent (événement QKeyEvent *) { QWidget :: keyPressEvent (événement); } void MyWidget :: keyReleaseEvent (événement QKeyEvent *) { QWidget :: keyReleaseEvent (event); } bool MyWidget :: événement (événement QKeyEvent *) { QWidget :: événement (événement); } – Ayman