Partage
  • Partager sur Facebook
  • Partager sur Twitter

Accents avec Qt

    20 janvier 2013 à 19:36:33

    Salut,

    Je suis au tout début de la partie sur Qt du tutoriel sur le C++, et je rencontre un léger soucis, à savoir que les accents ne s'affichent pas correctement (comme quand on encode une page web en ASCII avec un doctype UTF-8).

    J'aimerais savoir comment je peux régler ça ?

    Merci d'avance :)

    • Partager sur Facebook
    • Partager sur Twitter
      20 janvier 2013 à 20:25:37

      Ajoute ce code là dans ton main :

          // UTF-8 Encoding
          QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
          QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
          QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));



      • Partager sur Facebook
      • Partager sur Twitter
      Mon premier cours sur OCR : [C++/Qt] Créer un updater pour son programme
        20 janvier 2013 à 21:18:16

        Ils peut y avoir divers cause aux problèmes d'accent... La solution de lascars devrait le résourde

        Mais par curiosité as-tu bien encodé tes fichiers en UTF8 sans BOM ?

        • Partager sur Facebook
        • Partager sur Twitter
        Le mot que tu retiens entre tes lèvres est ton esclave. Celui que tu prononces est ton maître.
          21 janvier 2013 à 0:02:46

          Assouan a écrit:

          Ils peut y avoir divers cause aux problèmes d'accent... La solution de lascars devrait le résourde

          Mais par curiosité as-tu bien encodé tes fichiers en UTF8 sans BOM ?


          Non, je sais pas comment le faire, j'ai cherché vite fait ^^
          • Partager sur Facebook
          • Partager sur Twitter
            21 janvier 2013 à 0:33:26

            Qt Creator (encodage pour les prochains fichiers)

            - Outils >> Options... >> Editeur de Texte >> Comportement
            - Encodage par défaut : UTF-8
            - UTF-8 BOM : Toujours supprimer

            Qt Creator (convertir un fichier en UTF-8)

            - Ouvrir le fichier dans ton editeur de texte Qt Creator
            - Edition >> Choisir l'encodage... >> UTF-8 (si ce n'est déjà fait)

            Notepad++ (convertir un fichier en UTF-8)

            - Ouvrir le fichier dans ton editeur de texte Notepad++
            - Encodage >> Convertir en UTF-8 (sans BOM)

            • Partager sur Facebook
            • Partager sur Twitter
            Le mot que tu retiens entre tes lèvres est ton esclave. Celui que tu prononces est ton maître.
              8 février 2013 à 20:31:47

              Bonsoir,

              J'ai ce problème d'accents avec Qt sous Ubuntu-12.10.

              J'ai utilisé tout ce qui est décrit plus haut, mais le problème persiste inchangé.

              Être bloqué comme ça à mon premier programme Qt, c'est rageant.

              Que faire ?

              • Partager sur Facebook
              • Partager sur Twitter
                9 février 2013 à 16:03:32

                Voici le programme du cours auquel j'ai ajouté les lignes concernant UTF-8 proposées par Lascars:

                #include <QApplication>
                #include <QPushButton>

                int main(int argc, char *argv[])
                {
                    // UTF-8 Encoding
                    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
                    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
                    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

                    QApplication app(argc, argv);

                    QPushButton bouton("Salut les Zéros, la forme ?");
                    bouton.show();

                    return app.exec();
                }

                et voici le message d'erreur que j'obtiens :

                Expected constructor, destructor or type conversion before '(' token

                Qu'est-ce qui ne va pas ?

                Par ailleurs, ni

                le réglage préalable Outils/options/Éditeur de texte/Comportement : Encodage par défaut UTF-8

                ni

                Édition/Choisir l'encodage... UTF-8 appliqué au code existant

                ne me permettent d'obtenir le 'é" dans 'Zéros", remplacé par '©'

                • Partager sur Facebook
                • Partager sur Twitter
                  9 février 2013 à 16:17:43

                  Avec quelle version de Qt travailles-tu ? 4.8 ou 5.0 ? Car ses deux versions gère l'encodage de manière différentes :

                  Avec Qt 4.8, par défaut, l'encodage est en Latin-1 et tu dois utiliser QTextCodec pour dire à Qt que tu utilise l'UTF-8.
                  Avec Qt 5.0, l'encodage par défaut est l'UTF-8, donc il n'y a rien à faire.

                  De manière générale, tu peux utiliser ce code pour être sur qu'il fonctionne n'importe quand :

                  int main(int argc, char *argv[])
                  {
                      // Configuration des codec en UTF-8.
                  #if QT_VERSION < 0x050000
                      QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
                      QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
                  #endif
                      
                      // Configuration du système de traduction.
                      QTranslator translator;
                      translator.load("qt_" + QLocale::system().name().section('_', 0, 0),
                                      QLibraryInfo::location(QLibraryInfo::TranslationsPath));
                      
                      // Configuration de l'application et création de la fenêtre.
                      QApplication app(argc, argv);
                      app.installTranslator(&translator);
                      
                      MainWindow window;
                      window.showMaximized();
                      
                      // Lancement de l'application.
                      return app.exec();
                  }


                  Si avec ce code, tu as toujours des problèmes d'accents, alors, c'est que tes fichiers sources ne sont pas encodés en UTF-8, et dans ce cas, tu dois les convertir comme c'est expliqué un peu plus haut.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    10 février 2013 à 9:08:26

                    Ma version de qt est 4.8.3.

                    Le problème avec ce code

                    #include <QApplication>
                    #include <QPushButton>

                    int main(int argc, char *argv[])
                    {

                        QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
                        QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

                        QApplication app(argc, argv);

                        QPushButton bouton("Salut les Zéros, la forme ?");
                        bouton.show();

                        return app.exec();
                    }

                    est que j'obtiens l'erreur répétée pour chaque 'QtExtCodec' dans le code :

                    Incomplete type 'QtextCodec' used in nested name specifier

                    et ce aussi bien sous Ubuntu-12.10 que sous OpenSuse-12.2

                    Qu'est-ce que ça signifie ?

                    "Si avec ce code, tu as toujours des problèmes d'accents, alors, c'est que tes fichiers sources ne sont pas encodés en UTF-8, et dans ce cas, tu dois les convertir comme c'est expliqué un peu plus haut."

                    Comment faire sinon avec Édition/Choisir l'encodage... /UTF-8, qui ne marche pas !

                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 février 2013 à 9:54:34

                      XP15EF a écrit:

                      Ma version de qt est 4.8.3.

                      Le problème avec ce code

                      #include <QApplication>
                      #include <QPushButton>

                      int main(int argc, char *argv[])
                      {

                          QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
                          QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

                          QApplication app(argc, argv);

                          QPushButton bouton("Salut les Zéros, la forme ?");
                          bouton.show();

                          return app.exec();
                      }

                      est que j'obtiens l'erreur répétée pour chaque 'QtExtCodec' dans le code :

                      Incomplete type 'QtextCodec' used in nested name specifier

                      et ce aussi bien sous Ubuntu-12.10 que sous OpenSuse-12.2

                      Qu'est-ce que ça signifie ?

                      "Si avec ce code, tu as toujours des problèmes d'accents, alors, c'est que tes fichiers sources ne sont pas encodés en UTF-8, et dans ce cas, tu dois les convertir comme c'est expliqué un peu plus haut."

                      Comment faire sinon avec Édition/Choisir l'encodage... /UTF-8, qui ne marche pas !

                      1) Ce n'est pas QtextCodec mais QTextCodec, il est important ! De toujours respecté les majuscules en c++ !

                      2) Comment ça ? "ça ne marche pas" ça veut rien dire ! Soit plus constructif, explique ce qui ne va pas !

                      Essaye de convertir à l'aide de Notepad++, c'est plus facile ! Et c'est ce que la plus par des gens utilise pour convertir !

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Le mot que tu retiens entre tes lèvres est ton esclave. Celui que tu prononces est ton maître.
                        10 février 2013 à 20:46:27

                        "2) Comment ça ? "ça ne marche pas" ça veut rien dire ! Soit plus constructif, explique ce qui ne va pas !"

                        Édition/Choisir l'encodage ouvre une fenêtre affichant "Sélectionner l'encodage pour main.cpp". Dans la liste déroulante, je choisis "UTF-8" et valide. Je lance la compilation... et le texte du bouton n'affiche pas le "é".

                        Je fais cela comme proposé dans ce fil le 21 janvier, sans bien comprendre, car ce n'est pas le texte de main.cpp que je veux avoir en UTF8 (là, j'ai bien le "é"), mais le texte affiché dans le bouton après compilation.

                        Quant à Notepad++, il est spécifique à Windows. Sous Linux, j'utilise Kate... qui me montre que main.cpp est en UTF8.

                        Pour mémoire, ce n'est pas la correction de mes fautes de frappe que je demande, mais l'interprétation du message d'erreur que j'obtiens à la compilation.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 février 2013 à 12:43:44

                          XP15EF a écrit:

                          Ma version de qt est 4.8.3.

                          Le problème avec ce code

                          #include <QApplication>
                          #include <QPushButton>

                          int main(int argc, char *argv[])
                          {

                              QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
                              QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

                              QApplication app(argc, argv);

                              QPushButton bouton("Salut les Zéros, la forme ?");
                              bouton.show();

                              return app.exec();
                          }

                          est que j'obtiens l'erreur répétée pour chaque 'QtExtCodec' dans le code :

                          Incomplete type 'QtextCodec' used in nested name specifier


                          As-tu pensé à inclure QTextCodec au début du code via un #include <QTextCodec> ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 février 2015 à 16:58:28

                            Bonjour à tous et tout d'abord pour toutes vos contributions !

                            Je ressors un peu les vieux sujets mais je pense que c'est le topic qui correspond le mieux à mon problème :/

                            J'avais un projet sous Qt 4, tout en UTF-8 et tout marchait nickel.

                            On a du migré sous Qt 5.4 pour diverses raisons et des problèmes d'encodage sont apparus du genre :
                            "UTF-8 encoded files doesn’t open in QT creator"

                            J'ai donc utilisé vos différentes réponses (re-encodage avec Notepad++ et ajout des commandes dans le main) pour résoudre tous mes problèmes de compilation et d'édition. Cependant, j'ai besoin dans mon programme d'utiliser les chemins de fichiers et avec des accents ça ne marche plus (alors que tout fonctionnait parfaitement avec Qt4). Voici mon code :

                            oscMessagem;
                            m.setAddress("/video");
                            m.addStringArg(currentVideo->url.toStdString());
                            qDebug()<<"Drop:"<<currentVideo->url();
                            cout<<"Vraiurlencodée:"<<currentVideo->url.toStdString();
                            returnm;


                            Et voici ma console :

                            Drop : "D:/Boucles Vidéos/test.mov"

                            Vrai url encodée : D:/Boucles Vidéos/test.mov


                            Ce n'est donc pas le bon chemin de ma vidéo qui est envoyé :/

                            Vous avez des idées ? 

                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 février 2015 à 17:47:21

                              Re !

                              J'ai trouvé une solution dans un autre forum qui disait d'utiliser le Latin1 plutot que le UTF-8 pour passer de QString a string voici mon code et ca marche =)

                              QByteArraylatin1=currentVideo->url.toLatin1();
                              cout<<"Drop:"<<std::string(latin1.constData());
                              oscMessagem;
                              m.setAddress("/video");
                              m.addStringArg(std::string(latin1.constData()));
                              returnm;
                              • Partager sur Facebook
                              • Partager sur Twitter
                                21 février 2019 à 0:20:04

                                Merci Assouan, j'ai réenregistré les fichiers avec Sublime Text en mode UTF-8 (pas UTF-8 with BOM) et ça a marché !!!!
                                En fait le plugin QT crée automatiquement les fichiers par défaut en un autre encodage non compatible avec les accents.
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Accents avec Qt

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown