IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

QString et std::string


Sujet :

Qt

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Points : 379
    Points
    379
    Par défaut QString et std::string
    Bonjour,

    Je réalise un logiciel où doivent cohabiter des QString et des std::string. J'utilise les fonctions toStdString et fromStdString de QString, mais le problème (si j'ai bien tout compris) c'est que QString est en unicode, alors que std::string en en ASCII. Donc un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QString str ="éèà";
    str.fromStdString(str.toStdString()); //c'est couillon mais c'est pour l'exemple
    c'est mal. En fait je sais pas si le plus simple serait de garantir que mes QString ne contiennent que des caractères ascii, ou alors d'utiliser des std::wstring, mais alors attention à la gestion du codec? Je veux vraiment garantir que mes QString et std::string sont strictement identiques car j'aimerais les utiliser comme identifiants uniques dans mes structures de données.

    J'utilise Qt 4.4.1. Merci pour vos idées/expériences

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Points : 379
    Points
    379
    Par défaut
    Merci pour le lien mais après l'avoir lu je ne crois pas que ce soit ce qu'il me faut. Je pense que le plus simple dans mon cas est de forcer l'utilisateur à n'utiliser que des caractères ASCII, comme ça mes QString seront en ASCII et il n'y aura aucun problème de conversion avec les std::string.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 665
    Points
    5 665
    Par défaut
    Jao,
    Citation Envoyé par Cheps Voir le message
    Merci pour le lien mais après l'avoir lu je ne crois pas que ce soit ce qu'il me faut. Je pense que le plus simple dans mon cas est de forcer l'utilisateur à n'utiliser que des caractères ASCII, comme ça mes QString seront en ASCII et il n'y aura aucun problème de conversion avec les std::string.
    Ce n'est pas une solution, mais un camouflage du problème. Tu interdis en plus tout usage des caractères accentués, etc.

    Tous les utilisateurs n'apprécieront pas, et je les approuverai.

    Un truc est de tout faire en QString, et de ne se préoccuper de transcodage que lors de la sauvegarde/récupération des données, dans une base de données ou dans un fichier.

  5. #5
    Membre expérimenté
    Avatar de FloMo
    Homme Profil pro
    Freelance iOS
    Inscrit en
    Juillet 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Freelance iOS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 726
    Points : 1 511
    Points
    1 511
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QString QString::fromStdString ( const std::string & str )
    est une méthode statique qui renvoit un QString.

    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    QString str = "éhéhé"; // utf-8
    std::string str2 = str.toStdString(); // utf-8 -> ascii
    str = QString::fromStdString(str2); // ascii -> utf-8

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Points : 379
    Points
    379
    Par défaut
    Oui mais il y aura perte d'information, selon la doc Qt à propos de toStdString:

    If the QString contains non-ASCII Unicode characters, using this operator can lead to loss of information
    Donc comme dans mon exemple de code, un QString convertit en std::string puis reconvertit en QString ne sera plus le même.

    J'ai décidé de régler le problème en utilisant des wstring qui utilisent également de l'Unicode.

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Petite correction,
    QString contiens des caractère unicode, mais n'est pas encodé en UTF8..

    http://qt.developpez.com/doc/latest/unicode.html

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Points : 379
    Points
    379
    Par défaut
    Je n'ai pour l'instant pas de problème avec des wstring et les conversions, j'espère juste qu'il n'y en aura pas si je test mon programme sur une machine utilisant un set de caractères différents...

    Je me demande pourquoi une bibliothèque comme Qt ne réutilise pas la STL (pour les strings, containers, iterateurs, etc). La peur de comportements différents suivant la plate-forme?

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Cheps Voir le message
    Je me demande pourquoi une bibliothèque comme Qt ne réutilise pas la STL (pour les strings, containers, iterateurs, etc). La peur de comportements différents suivant la plate-forme?
    strings : Qt utilise l'unicode dont difficile de réutilise les string

    containers : certain compilateur avait une très mauvaise implémentation de la STL. Ils ont donc créé leurs propre centenaires(compatible avec la STL). De plus les class Qt ont une sémantique de copy et utilisent le COW :
    http://qt.developpez.com/doc/latest/...licitly-shared

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. QString et/ou std::string
    Par ccinfonews dans le forum Débuter
    Réponses: 3
    Dernier message: 20/11/2011, 17h55
  2. Cast de std::string en QString
    Par okolat dans le forum Débuter
    Réponses: 1
    Dernier message: 24/06/2011, 12h42
  3. QString et std::string
    Par jackk dans le forum Débuter
    Réponses: 15
    Dernier message: 18/06/2011, 17h10
  4. Conversion std::string QString
    Par krokmitaine dans le forum Qt
    Réponses: 15
    Dernier message: 24/11/2006, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo