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

Discussion :

QString et std::string

  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 522
    Points : 727
    Points
    727
    Par défaut QString et std::string
    Bonjour,

    j'ai un petit soucis de conversion de QString en std::string. J'ai appliqué la méthode toStdString(), mais le résultat n'est pas convainquant.

    Je travaille avec visual studio 2010 après avoir installé le binaire de Qt qui va bien (Merci developpez.com). Après conversion de "toto" par exemple, la chaine obtenue possède en début de chaine 4 octets supplémentaires et sa longueur est aléatoire (jusqu'à quelques milliers).

    Je possède en parallèle VS2008 et le binaire de Qt s'est installé sur cette version également. Ce qui est curieux, c'est que le même code génère cette fois une chaine correcte.

    Dans la doc de QString on peut lire "This operator is only available if Qt is configured with STL compatibility enabled."
    Je ne vois pas trop où intervenir pour configurer ceci.

    Merci pour vos propositions.

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 694
    Points : 188 894
    Points
    188 894
    Par défaut


    Citation Envoyé par jackk Voir le message
    Je ne vois pas trop où intervenir pour configurer ceci.
    Lors de la compilation.

    Version de Qt utilisée ? Utilises-tu exactement le même binaire pour les deux versions de VS ? Un peu de code ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 522
    Points : 727
    Points
    727
    Par défaut
    merci pour ta réponse.

    Lors de la compilation.
    Je ne trouve pas quel option activer ou quelle option ajouter dans la ligne de commande

    Version de Qt utilisée ?
    Qt 4.7

    Utilises-tu exactement le même binaire pour les deux versions de VS ?
    oui, l'installation du binaire a configuré les 2 versions de VS d'un coup.

    Un peu de code ?
    Je me suis contenté d'ouvrir un projet console et d'ajouter ces quelques lignes pour mettre le problème en évidence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <QtCore/QCoreApplication>
    #include <iostream>
    #include <string>
    #include <iomanip>
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        QString Qtrame = "B+125:10 \x0a";
        string trameE = Qtrame.toStdString();
        cout << trameE.length() << "caracteres";
        cout << trameE << endl;
        return a.exec();
    }
    J'ai utilisé le debugger pour voir le contenu du tableau après conversion de QString en string.

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Bonjour

    Pour l'option de compilation, par défaut elle est activée. De plus, tu aurais eu une erreur lors de l'appel à toStdString() ("non déclaré")

    Le code donné est correcte.

    Le problème doit venir de la compatibilité avec VS 2010 à priori (ou un conflit entre les 2 versions de VS ?). Bref, pas de solution à te proposer (sauf à passer sous VS 2008 puisque VS 2010 n'est pas officiellement supporté je crois)

    Il faut attendre les avis des utilisateurs de VS 2010

    PS : petite remarque, les noms commençant par Q + majuscule sont habituellement utilisés comme nom de classe dans Qt. Il vaut mieux éviter de les utiliser comme nom de variable

  5. #5
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 522
    Points : 727
    Points
    727
    Par défaut
    PS : petite remarque, les noms commençant par Q + majuscule sont habituellement utilisés comme nom de classe dans Qt. Il vaut mieux éviter de les utiliser comme nom de variable
    désolé

    Il est tout de même étonnnant que les 2 versions de VS produisent un code différent en appelant la même librairie, celle de Qt en l’occurrence.

    J'attends d'autre avis. L'idéal serait que quelqu'un ait également installé Qt dans VS et puisse faire un essai.

  6. #6
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 694
    Points : 188 894
    Points
    188 894
    Par défaut
    Citation Envoyé par jackk Voir le message
    oui, l'installation du binaire a configuré les 2 versions de VS d'un coup.
    C'est mal. C'est très mal. C'est LE mal. Les deux utilisent des versions différentes des bibliothèques standard, ce qui donne parfois des erreurs assez étranges. Une version de Qt par version de VC. Surtout quand tu commences à toucher à un truc qui va à moins de quarante-deux kilomètres de la bibliothèque standard (dont STL).

    @Guillaume : VC10 est supporté en tier-2. http://qt.developpez.com/doc/4.7/supported-platforms.

  7. #7
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 522
    Points : 727
    Points
    727
    Par défaut
    C'est mal. C'est très mal. C'est LE mal.
    Aïe. Je suis obligé d'avoir les 2 versions de VS pour des problèmes de compatibilités avec du code existant. Je pensais n'installer Qt que pour VS2008 et il s'est en fait installé dans les 2 versions.

    Je me contenterai donc de VS 2008 pour le moment. C'est très supportable même si on s'habitue vite aux petits détails sympa de la version 2010.

    Merci pour tout.

  8. #8
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 694
    Points : 188 894
    Points
    188 894
    Par défaut
    Citation Envoyé par jackk Voir le message
    Je pensais n'installer Qt que pour VS2008 et il s'est en fait installé dans les 2 versions.
    Avec l'add-in ? Tu peux modifier les versions reconnues très simplement (quelque part dans les menus ).

    Si tu fais tout en ligne de commande, il suffit de s'arranger que le PATH reste bien propre.

    Mais il faut impérativement des binaires différents.

  9. #9
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 522
    Points : 727
    Points
    727
    Par défaut
    je vais essayer çà.

    A+

  10. #10
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 522
    Points : 727
    Points
    727
    Par défaut
    Petit soucis, les binaires pour VS2010 ne fonctionnent que sur une plateforme 32 bits et mon OS est en 64 bits.

    Donc VS2008 en attendant mieux.

    A+

  11. #11
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 694
    Points : 188 894
    Points
    188 894
    Par défaut
    Citation Envoyé par jackk Voir le message
    Petit soucis, les binaires pour VS2010 ne fonctionnent que sur une plateforme 32 bits et mon OS est en 64 bits.
    . Faux. Absolument faux. WOW64 existe. Sinon, rien ne pourrait fonctionner sur ta machine ! (Compte le nombre d'applications que tu utilises encore en 32 bits... à tout hasard, VS9 ?). L'inverse n'est pas vrai, cependant.

  12. #12
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 522
    Points : 727
    Points
    727
    Par défaut
    Alors je ne comprends pas comment on doit interpréter la colonne plateforme dans cette page

  13. #13
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 694
    Points : 188 894
    Points
    188 894
    Par défaut
    C'est la plateforme pour laquelle le binaire a été compilé. Tu veux comprendre ça comment ?

  14. #14
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 522
    Points : 727
    Points
    727
    Par défaut
    ok, j'essaie ça cet après-midi.

    A+

  15. #15
    Membre averti

    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 243
    Points : 398
    Points
    398
    Par défaut
    Voici ce que ça donne chez moi :

    MSVC2008 :

    MSVC2010 :

    Ca donne bien la même chose...

    Par contre si tu as un problème avec le dernier binaire (4.7.3 en MSVC2010) n'hésite pas à demander, car j'ai eu moi-même qq soucis avec :p

  16. #16
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 522
    Points : 727
    Points
    727
    Par défaut
    Merci pour vos réponses.

    J'ai installé l'add in 1.1.9 car j'en étais visiblement resté à la 1.1.7.

    On ne peut pas contrôler l'installation de l'add in pour une version de MSVS donnée.

    J'ai maintenant les 2 versions du binaire Qt. J'ai sélectionne le nouveau binaire dans les project settings de VS2010 et désormais la chaine est convertie correctement.
    Il reste un léger soucis car lorsque j'ai voulu vérifier si VS2008 n'était pas affecté, j'ai remarqué que les project settings avaient changé.
    Après vérification, lorsque je sélectionne une version de Qt dans VS2008 ou 2010, ça affecte l'autre version.
    C'est génant mais ca reste très supportable, d'autant qu'à 1ère vue VS2008 a l'air de supporter le nouveau binaire.

    A+

Discussions similaires

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

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