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 :

tableaux de QString

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2010
    Messages : 17
    Par défaut tableaux de QString
    Bonjours !

    Voici une description du problème que je rencontre, dans mon apprentissage long et délicat de Qt :

    j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private :
    QString *tableau = NULL;
    dans mon fichier .h de ma classe.
    j'ai modifié ce tableau dans un slot, en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tableau = new QString[nombre];
    (nombre a auparavant été définis dans le même slots)

    Ensuite je rempli mon tableau, et tout va très bien.

    Sauf que, lorsque je fait, dans un autre slot, une fois le tableau rempli (c'est obligatoire, car le second ne peut pas être appelé tant que le premier ne l'a pas été (le bouton est désactivé)) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    QString chaine;
    chaine = "un mot "+ tableau[0]
    le compilateur m'insulte et me dit :
    invalids operands of types 'const char[8]' and 'QString*' to binary 'operator+'

    Pourtant, selon ce que je pensait savoir des tableaux, une "case" de mon tableau doit contenir un objet en tout point semblable à une QString ...
    Et donc que je suis censé pouvoir l'ajouter à une autre chaine, l'afficher, ...

    Mais le pire, c'est que je peux l'afficher, mais uniquement dans mon slot ou je l'ai rempli. Donc, dans le troisième slot, là ou le bug se trouve, il refuse d'afficher mon tableau[0] et me dit :
    no matching function for call 'QMessageBox::information(MainWindow* const, const char[8], QString*&)

    Donc il y a une grosse différence entre QString et une QString dans un tableau. La question est, pourquoi il l'affiche dans mon premier slot, et pas dans mon second ... car la ligne de code est la même, et le tableau a pas changé entre temps ...

    Voila où j'en suis dans ma réflexion. J'aurais aimer savoir qu'est-ce qui se passe, pourquoi, et comment faire pour résoudre ce problème.

    Merci d'avance ^^

  2. #2
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Et si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QString chaine;
    chaine = QString("un mot ").append(tableau[0]);
    Car là tu essaye d'ajouter un char* "un mot " avec une QString via l'operateur operator+ et une telle fonction n'existe pas. Tout simplement.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2010
    Messages : 17
    Par défaut
    Et bien il ne me dit plus rien ...
    Mais pourquoi ne veut-il pas l'afficher seule ?
    En faite, je ne comprend pas qu'est-ce qui se trouve dans mon tableau ?
    Est-ce que c'est une QString, un pointeur, autre chose ?
    Parce que après, l'idée, c'est de comparer mon tableau avec une autre QString ... Mais je vois pas pourquoi est-ce que je ne peux pas l'afficher de partout avec le même code ...

    En gros, qu'est-ce qui change entre mes slots (pour l'affichage d'un coté, et pas de l'autre), et surtout, qu'elle est la différence entre une case d'un tableau de QString et une QString "classique" ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2010
    Messages : 17
    Par défaut
    Et ma comparaison ne fonctionne pas ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    QString chaine;
    chaine = "mot";
    tableau[0]="mot";
    QMessageBox::information(this, "dialogue", "affichage");
    if (tableau[0] == chaine)
    {
        QMessageBox::information(this, "correcte", "le tet est positif");
    }
    Windows affiche la première, et une fois que j'ai appuyé sur ok, il me met :
    truc.exe a cessé de fonctionner.
    Un problème a fait que le programme a cessé de fonctionner correctement. Windows va fermer ce programme et vous indiquer si une solution est possible.

    Donc je pense que le test ne fonctionne pas ...
    Comment peut-on corriger ce problème ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2010
    Messages : 17
    Par défaut
    J'ai aussi tenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    QString chaine;
    chaine = tableau[0];
    Mais là, il me dit :

    invalid conversion from 'QString*' to 'char'
    initializing argument 1 of 'QString& QString::operator=(char)'

    Ce que je ne comprend pas, c'est que dans ce cas là, il ne gère que des QString ... Donc pourquoi est-ce qu'il vient me parler de char ??

  6. #6
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Citation Envoyé par --Kaim-- Voir le message
    Et bien il ne me dit plus rien ...
    Mais pourquoi ne veut-il pas l'afficher seule ?
    En faite, je ne comprend pas qu'est-ce qui se trouve dans mon tableau ?
    Est-ce que c'est une QString, un pointeur, autre chose ?
    Parce que après, l'idée, c'est de comparer mon tableau avec une autre QString ... Mais je vois pas pourquoi est-ce que je ne peux pas l'afficher de partout avec le même code ...
    Tu dois avoir un autre problème indépendant de l'affichage. Car aucune raison que tu ne puisses pas l'afficher partout.

    Citation Envoyé par --Kaim-- Voir le message
    En gros, qu'est-ce qui change entre mes slots (pour l'affichage d'un coté, et pas de l'autre), et surtout, qu'elle est la différence entre une case d'un tableau de QString et une QString "classique" ?
    Il n'y en a pas à priori.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2010
    Messages : 17
    Par défaut
    Le problème d'affichage peut-il venir d'une mauvaise définition de mon tableau ?

    J'ai définit QString *tableau dans mon header, mais je n'ai créé véritablement le tableau que dans une fonction. Est-ce que mon tableau ne serait alors valable que dans cette fonction, comme toutes les variables locales ?

    Parce que je pensais que toutes les variables définies dans le constructeur et/ou dans le header étaient valables dans toute la classe. Du moins, c'est ce que j'ai cru remarquer.

  8. #8
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Citation Envoyé par --Kaim-- Voir le message
    Le problème d'affichage peut-il venir d'une mauvaise définition de mon tableau ?

    J'ai définit QString *tableau dans mon header, mais je n'ai créé véritablement le tableau que dans une fonction. Est-ce que mon tableau ne serait alors valable que dans cette fonction, comme toutes les variables locales ?

    Parce que je pensais que toutes les variables définies dans le constructeur et/ou dans le header étaient valables dans toute la classe. Du moins, c'est ce que j'ai cru remarquer.
    Pourquoi tu n'utilises pas une QList<QString> qui est beaucoup plus simple à utiliser ?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/08/2003, 18h04
  2. free sur des tableaux "a moitié dynamiques"
    Par barthelv dans le forum C
    Réponses: 4
    Dernier message: 31/07/2003, 15h30
  3. [langage] erreurs utilisation tableaux 2 dimensions
    Par drosof dans le forum Langage
    Réponses: 11
    Dernier message: 01/07/2003, 11h44
  4. Réponses: 6
    Dernier message: 04/04/2003, 15h28
  5. Les tableaux en PL/SQL
    Par GRUMLY dans le forum PL/SQL
    Réponses: 5
    Dernier message: 12/08/2002, 18h10

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