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 :

Faire un cast de QSting en char*


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Par défaut Faire un cast de QSting en char*
    Bonjour, j'ouvre un fichier en recuperant son nom dans un QFilDiaolog qui me retourne un QString ensuite je voudrais lire mon fichier en utilisant std::ifstream file(const char*) qui prend en entrée un char*!!!là j'ai un probléme car le parametre que je recupere et que je veux passer ensuite en parametre pour lire le fichier est un QString au lieu d'un char*!!
    Donc il me faut faire une conversion de QString vers char*??

    J'ai fais ça mais ca marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    QString fileName = QFileDialog::getOpenFileName(0, QString(), QString(),
                                             tr("Images (*.fxd)"));
     
    OpenFile(const QString fileName)
     
    ensuite un cast pour lire le fichier:
    const char* File = static_cast<const char*>(fileName) ;
    merci d'avance

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QString fileName = QFileDialog::getOpenFileName(0, QString(), QString(),
                                             tr("Images (*.fxd)"));
     
    char* file = fileName.toLocal8Bit().data();
    Attention, comme le dit bien la doc de QString:
    The returned byte array is undefined if the string contains characters not supported by the local 8-bit encoding.
    A noter également qu'il existe d'autres fonctions de conversion dans le même principe que toLocal8Bit() à choisir en fonction du type d'encodage que tu utilises: toLatin1() et toAscii().

    Chacune d'elle te retourne un QByteArray qui n'est ni plus ni moins qu'une classe stockant un tableau de char. La fonction QByteArray::data() te retournant un pointeur vers ce tableau (ie. un char*)

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Citation Envoyé par lisco Voir le message
    ensuite je voudrais lire mon fichier en utilisant std::ifstream file(const char*)
    Puisque que tu as déjà du Qt, tu peux aussi utiliser QFile ou QIODevice, qui seront surement beaucoup plus simple d'utilisation !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Bonjour,

    Y'a pas une methode du genre :

    QString toto;
    toto.tochar();

    Cordialement,
    PKO

  5. #5
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Non il n'y a pas ce genre de méthode pour la bonne et simple raison qu'un QString peut potentiellement contenir beaucoup plus de caractères qu'un encodage sur 8 bits en particulier (chaque caractère d'une QString est un QChar, soit un caractère en 16bits Unicode).

    Du coup, si une fonction toChar devait exister, quel encodage devrait-elle utiliser ? l'encodage local ? ASCII ? UTF-8 ? UTF-16 ? etc...

    L'idée d'avoir des fonctions distinctes est au contraire une bonne chose: ça oblige le développeur à se poser la question: "attention je veux convertir dans un encodage différent. Je dois bien prendre en compte quel types de caractères j'ai en entrée et ce que je veux en sortie".

    Et puis, il faut pas exagérer: fileName.toLocal8Bit().data() n'est pas si long que ça à écrire

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Au temps pour moi, j'aurais du y penser .

    Merci de l'info en tout cas.

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par nouknouk
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* file = fileName.toLocal8Bit().data();
    quand est détruit la temporaire produit par fileName.toLocal8Bit()?
    Il me semble que dans ton cas, file pointe sur de la mémoire détruite. Je ne sais plus.

    Perso, je préfère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string file = fileName.toStdString();

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 164
    Par défaut
    on en a déjà parlé ici et la discussion avait débouchée sur 3 manières différentes possibles : http://www.developpez.net/forums/d69...-qstring-char/

Discussions similaires

  1. Faire le cast d'une collection List<char> en List<int>
    Par Xx_raaY dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/07/2009, 14h08
  2. [jsp] Comment faire un cast de Vector to String?
    Par adil_vpb dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 05/03/2007, 11h29
  3. Réponses: 19
    Dernier message: 30/05/2006, 18h43
  4. Réponses: 12
    Dernier message: 31/12/2005, 16h01
  5. comment faire un cast d'un CString en int ?
    Par 180degrés dans le forum MFC
    Réponses: 1
    Dernier message: 23/12/2005, 22h02

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