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

 C++ Discussion :

changer un pointeur QString en un type QString.


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 71
    Par défaut changer un pointeur QString en un type QString.
    Bonjour

    une question de debutant peut etre:
    s'il vous plait comment changer un pointeur QString en un type QString.

    Voila l'initialisation du pointeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for( int i = 0; i < formatsCount; i ++ )
    {
    formats[ i ] = new QString[ 2 ];
    }
     
    //projections
    for( int i = 0; i < projectionsCount; i ++ )
    {
    projections[ i ] = new QString[ 2 ];
    }
     
    #include "../inc/Dta.h"
    Dans le Dta.h les données sont décrite comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    formats[ 0 ][ 0 ] = "" ; formats[ 0 ][ 1 ] = "" ;
    formats[ 1 ][ 0 ] = "ESRI Shapefile" ; formats[ 1 ][ 1 ] = "shp" ;
    formats[ 2 ][ 0 ] = "MapInfo File" ; formats[ 2 ][ 1 ] = "tab" ;
    formats[ 3 ][ 0 ] = "BNA" ; formats[ 3 ][ 1 ] = "bna" ;
    formats[ 4 ][ 0 ] = "CSV" ; formats[ 4 ][ 1 ] = "csv" ;
    formats[ 5 ][ 0 ] = "GML" ; formats[ 5 ][ 1 ] = "gml" ;
    formats[ 6 ][ 0 ] = "KML" ; formats[ 6 ][ 1 ] = "kml" ;

    alors pour afficher dans un txtedit il faut que sa soit un QString et non pas pointeur sinon j'ai toujours une erreur de segmentation !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    txtFileSource->setText(formats[ 1 ][ 0 ]);

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Par défaut
    Pour moi : formats[ 0 ][ 0 ] est un QString et non pas un pointeur. Mais pour répondre à ta question si on a par exemple< QString* string >et on veux passer au type QString , tu peux essayer <*string>.

    J'espère que ça répond à ta question.

    Bon Courage.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Si tu as un tableau à 2 dimensions :
    Alors, il te faut déréférencer 2 fois pour obtenir une QString :
    format[i][j].

    Si tu as un tableau à 2 dimensions de pointeur de QString:
    Alors, il te faut déréférencer 3 fois pour obtenir une QString :
    *(format[i][j]).

    Question annexe : pourquoi un tableau de tableau sur des pointeurs et non un tableau de tableau sur des valeurs ?
    Question annexe 2 : pourquoi des tableaux et non des vector ? (ça t'épargnerais ces soucis).

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 71
    Par défaut pourquoi
    Bonjour,

    Merci bien pour vos reponses .

    J'utilise un tableau de pointeur parce que mon projet est de changer le framework de wxWidgets vers QT.Et l'ancienne version utilisait des new wxString, alors j'ai utilisé la même structure
    J'aime bien changer pour des valeurs comme ça j'utilise directement.

    J'aimerai avoir de l'aide pour ce sujet,
    Question: est ce je peux déclarer les données comme des QString directement dans mon Dta.h? comme ça j'ai pas besoin d'initialiser les tableaux au début du programme dans Frm.cpp??

    Je viens de modifier la déclaration du tableau comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for( int i = 0; i < formatsCount; i ++ )
    	{
     
    		QString formats [i];
    	}
    mais il y a une erreur de segmentation qui s'affiche!
    Est-ce dû aux types ,pointeurs?? mais là c'est un QString que je déclare et le settext prend un parametre QString ,je vois pas le problème.


    Merci pour votre aide une autre fois.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Je dois avouer avoir du mal à comprendre la description de ton problème.
    Peux-tu préciser quel est le type de formats ?
    Peux-tu montrer comment tu initialises les différents éléments de ce(s) tableau(x) ?
    Peux-tu montrer comment tu les utilises ensuite ?
    Merci.

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 71
    Par défaut reponse
    le type de format est le suivant QString:

    je le declare dans ces lignes de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for( int i = 0; i < formatsCount; i ++ )
    	{
     
    		formats[ i ] = new QString[ 2 ];
    	}
    #include "../inc/Dta.h" // j'inclue les donneé
    les données de ce tableau (du fichier Dta.h) c'est la suivante (le contenu de Dta.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    formats[ 0 ][ 0 ] =  "" ;				formats[ 0 ][ 1 ] =  "" ;
    formats[ 1 ][ 0 ] =  "ESRI Shapefile" ;			formats[ 1 ][ 1 ] =  "shp" ;
    formats[ 2 ][ 0 ] =  "MapInfo File" ;			formats[ 2 ][ 1 ] =  "tab" ;
    formats[ 3 ][ 0 ] =  "BNA" ;				formats[ 3 ][ 1 ] =  "bna" ;
    formats[ 4 ][ 0 ] =  "CSV" ;				formats[ 4 ][ 1 ] =  "csv" ;
    formats[ 5 ][ 0 ] =  "GML" ;				formats[ 5 ][ 1 ] =  "gml" ;
    formats[ 6 ][ 0 ] =  "KML" ;				formats[ 6 ][ 1 ] =  "kml" ;

    apres tout ca je voulais afficher le contenue de formats[1][0] dans un txtedit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    txtFileSource->setText(formats[ 1 ][ 0 ]);
    //j'ai essayer aussi comme vous m'avez demander : txtFileSource->setText(*(formats[ 1 ][ 0 ])); aussi txtFileSource->setText(**(formats[ 1 ][ 0 ])); !!
    Merci

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Par défaut
    Bonjour,
    Est ce que ton "formats" est bien un <QString **> ?
    et pour l'initialisation j'aurais fait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    QString **formats = NULL;
    formats = new QString*[2];
    for(int i=0; i<2; i++)
    {
    formats[i]  = new QString[3]; //3 juste à titre d'exemple.
    //la suite n'est pas nécessaire
    for(int j =0; j<3; j++)
    {
    formats[i][j]=""; //initialisation de touts des QString.
    }
    }
    J'espère que ça réponds à ta question.

    Bon Courage.

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 71
    Par défaut ok
    Merco ça a bien marché la déclaration
    mais il y a un probleme de segmentation quand je veux utiliser mon tableau (structure roposée par Mehdi
    ctte erreur est du a une simple affectation:QString types=formats[ 3 ][ 1 ];
    la aprés l'initialisation j'inclue un fichier de données qui s'appel Dta.h comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    QString **formats = NULL;
    formats = new QString*[2];
    for(int i=0; i<2; i++)
    {
    formats[i]  = new QString[formatsCount]; //3 juste à titre d'exemple.
    //la suite n'est pas nécessaire
     
    }
     
     
    #include "../inc/Dta.h"

    le dta.h est le suivant :

    Dta.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    formats[ 0 ][ 0 ] =  "" ;				formats[ 0 ][ 1 ] =  "" ;
    formats[ 1 ][ 0 ] =  "ESRI Shapefile" ;			formats[ 1 ][ 1 ] =  "shp" ;
    formats[ 2 ][ 0 ] =  "MapInfo File" ;			formats[ 2 ][ 1 ] =  "tab" ;
    formats[ 3 ][ 0 ] =  "BNA" ;				formats[ 3 ][ 1 ] =  "bna" ;
    formats[ 4 ][ 0 ] =  "CSV" ;				formats[ 4 ][ 1 ] =  "csv" ;
    formats[ 5 ][ 0 ] =  "GML" ;				formats[ 5 ][ 1 ] =  "gml" ;
    formats[ 6 ][ 0 ] =  "KML" ;				formats[ 6 ][ 1 ] =  "kml" ;

    cette erreur de segmentation n'apparaît pas si (un testque j'ai fait ) j'affecte à types :
    types="Hello" ;
    !!!!

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Par défaut
    Je n'ai pas bien compris ta question, mais si tu as gardé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    QString **formats = NULL;
    formats = new QString*[2];
    c'est normal que :
    QString types=formats[ 3 ][ 1 ];
    ne marche pas, il faut au moins :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    formats = new QString*[4];//3+1

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 71
    Par défaut
    voila je viens de le modifier :
    dans le Frm.h j'ai déclaré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    const static int formatsCount = 7;
    		//QString *formats;
    		QString **formats;
    le Frm.cpp
    (mon tableau dans Dta.h contient 6 lignes et 2 colonnes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    formats= NULL;
    formats = new QString*[formatsCount];
    for(int i=0; i<formatsCount; i++)
    {
    formats[i]  = new QString[2]; //3 juste à titre d'exemple.
    //la suite n'est pas nécessaire
    for(int j =0; j<2; j++)
    {
    formats[i][j]=""; //initialisation de touts des QString.
    }
     
    }

    la déclaration du tableau je l'ai changé de :
    Dta.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    formats[ 0 ][ 0 ] =  "" ;				formats[ 0 ][ 1 ] =  "" ;
    formats[ 1 ][ 0 ] =  "ESRI Shapefile" ;			formats[ 1 ][ 1 ] =  "shp" ;
    formats[ 2 ][ 0 ] =  "MapInfo File" ;			formats[ 2 ][ 1 ] =  "tab" ;
    formats[ 3 ][ 0 ] =  "BNA" ;				formats[ 3 ][ 1 ] =  "bna" ;
    formats[ 4 ][ 0 ] =  "CSV" ;				formats[ 4 ][ 1 ] =  "csv" ;
    formats[ 5 ][ 0 ] =  "GML" ;				formats[ 5 ][ 1 ] =  "gml" ;
    formats[ 6 ][ 0 ] =  "KML" ;				formats[ 6 ][ 1 ] =  "kml" ;
    à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    formats[ 0 ][ 0 ] =  QString("") ;				formats[ 0 ][ 1 ] =  QString("" );
    formats[ 1 ][ 0 ] =  QString("ESRI Shapefile") ;			formats[ 1 ][ 1 ] =  QString("shp" );
    formats[ 2 ][ 0 ] =  QString("MapInfo File") ;			formats[ 2 ][ 1 ] =  QString("tab" );
    formats[ 3 ][ 0 ] =  QString("BNA" );				formats[ 3 ][ 1 ] =  QString("bna" );
    formats[ 4 ][ 0 ] =  QString("CSV") ;				formats[ 4 ][ 1 ] =  QString("csv" );
    formats[ 5 ][ 0 ] =  QString("GML") ;				formats[ 5 ][ 1 ] =  QString("gml" );
    formats[ 6 ][ 0 ] =  QString("KML" );				formats[ 6 ][ 1 ] =  QString("kml") ;
    Mais sa ne fonctionne pas encore toujours l'eeure de segmentation lors de l'execution!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QString types=formats[ 3 ][ 1 ];  //sont de eme type QString mais ca crée une erreur d'execution (segmentation) !!
    Merci pour votres aide

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 71
    Par défaut j'ai trouver l'erreur
    le probleme c'est que l'initialisation ne se fait que dans le constructeur
    ca veut dire apres initialisation dans le constructeur dans d'autres methodes je n'arrive pas a acceder a ce tableau (peut etre parceque c'est dans un SLOT que je l'utilise )??
    avez vous une idée a regler ça?
    Merci

Discussions similaires

  1. changer un pointeur QString en un type QString.
    Par chochatown dans le forum Qt
    Réponses: 2
    Dernier message: 16/06/2009, 16h04
  2. Réponses: 10
    Dernier message: 28/07/2006, 15h18
  3. Changer le pointeur de la souris
    Par jolann69 dans le forum 4D
    Réponses: 1
    Dernier message: 13/06/2006, 08h40
  4. Pointeurs et changement de types louches
    Par BenjaminLustrement dans le forum C
    Réponses: 8
    Dernier message: 08/06/2006, 13h34

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