Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [2.0] TextEntered jamais déclenché...  (Lu 2766 fois)

0 Membres et 1 Invité sur ce sujet

cobra.one

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
[2.0] TextEntered jamais déclenché...
« le: Juillet 17, 2013, 02:12:40 am »
Bonsoir :)

Je travaille actuellement sur un projet top secret de la plus haute importance et j'ai choisi SFML 2.0 pour m'accompagner tout au long de son développement. Soit dit en passant, un grand bravo à ses développeurs pour le travail accompli dans tous les domaines, tant le résultat est bien chiadé !

Voici mon problème. Je dispose d'une fenêtre créée via Qt 4, intégrant un widget OpenGL sur base SFML. Dans cette fenêtre, j'ai donc un rendu 3D (moteur maison), et je viens d'y intégrer une petite console style Quake. Je récupère tous les évènements possibles dans cette fenêtre, notamment concernant le clavier. Jusque là, l'évènement KeyPressed me suffisait. Mais avec l'implantation de la console, j'ai besoin de récupérer l'événement TextEntered. Or, je n'y parviens point ! En gros chaque touche pressée produit juste un KeyPressed... Voici le code impliqué :

            void GLout::__GLLoop::exec() {
                sf::Event e;

                while (_gl_out->pollEvent(e))
                    if (e.type == sf::Event::Closed)
                        this->stop();
                    else if (e.type == sf::Event::Resized)
                        _gl_out->resize(e.size.width, e.size.height);
                    else
                        __parseEvent(e);

                _gl_out->repaint();
                _curr_loop++;
            }

            void GLout::__GLLoop::__handleKeyboard(const sf::Event &e) {
                if (e.type == sf::Event::TextEntered) {
                    console() << "te\n";
                    if (_gl_out->getGLConsole()->IsOpen()) {
                        _gl_out->getGLConsole()->KeyboardFunc(e.text.unicode);
                    }
                }

                if (e.type == sf::Event::KeyPressed) {
                    console() << "kp\n";
                    if (e.key.code == sf::Keyboard::Quote)
                        _gl_out->getGLConsole()->ToggleConsole();
                       
                    if (!_gl_out->getGLConsole()->IsOpen())
                        _busclient.broadcast<sf::Event::KeyEvent>(CHANNEL_0, TYPE_EVENT_KEYPRESSED, e.key, PRIORITY_HIGH);
                }

                if (e.type == sf::Event::KeyReleased)
                    _busclient.broadcast<sf::Event::KeyEvent>(CHANNEL_0, TYPE_EVENT_KEYRELEASED, e.key, PRIORITY_HIGH);
            }

            void GLout::__GLLoop::__parseEvent(const sf::Event &e) {
                __handleKeyboard(e);
                __handleMouse(e);
                __handleJoystick(e);
            }

Si quelqu'un a une idée je suis preneur...
Merci :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [2.0] TextEntered jamais déclenché...
« Réponse #1 le: Juillet 17, 2013, 08:35:34 am »
Tu es sous quel OS ? Tu peux tester l'évènement TextEntered dans un code minimal, histoire de savoir si le problème vient de ton code ou bien si l'évènement ne marche réellement pas chez toi ?
Laurent Gomila - SFML developer

cobra.one

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Re : [2.0] TextEntered jamais déclenché...
« Réponse #2 le: Juillet 17, 2013, 07:00:40 pm »
Merci pour ta réponse :)
Je suis sous Windows XP SP2.

Bon j'ai repris le code pour le tester, avec les résultats suivants :

- je créé une fenêtre avec SFML, je teste TextEntered, nickel, l'événement est bien émis.
- je créé une fenêtre avec Qt, et j'y place mon widget QSFMLCanvas (dont le code est presque identique à celui du tutorial trouvé là : http://sfml-dev.org/tutorials/1.6/graphics-qt-fr.php). Et là, avec une boucle d'événement identique au cas précédent, je ne récupère plus les TextEntered... par contre KeyPressed, KeyReleased, etc, fonctionnement très bien.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [2.0] TextEntered jamais déclenché...
« Réponse #3 le: Juillet 17, 2013, 09:20:01 pm »
Ca c'est normal, je ne m'attarderais pas trop dessus si j'étais toi.
Laurent Gomila - SFML developer

cobra.one

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Re : [2.0] TextEntered jamais déclenché...
« Réponse #4 le: Juillet 17, 2013, 10:00:50 pm »
Ok merci pour ta réponse.

J'avais du coup commencé à faire via KeyPressed, je vais continuer dans cette voie. Le surcoît de travail n'est de toute façon pas énorme, sachant que je n'ai pas besoin de tous les caractères ni de gérer toutes les touches.

Merci encore.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [2.0] TextEntered jamais déclenché...
« Réponse #5 le: Juillet 17, 2013, 11:03:01 pm »
Utilise plutôt les évènements Qt.
Laurent Gomila - SFML developer

cobra.one

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Re : [2.0] TextEntered jamais déclenché...
« Réponse #6 le: Juillet 18, 2013, 12:01:31 am »
L'idée n'est pas mauvaise, mais l'un des objectifs à terme est de ne plus être dépendant de Qt. Je le conserve pour des questions pratiques comme par exemple la possibilité de créer rapidement de petites GUI me facilitant le pilotage du code à des fins de test, et d'ailleurs le problème rencontré avec TextEntered va surtout me conduire à passer directement par une fenêtre SFML pour le rendu OpenGL...

Merci encore pour ta réactivité.