Partage
  • Partager sur Facebook
  • Partager sur Twitter

C++ Qt

Convertir un string en QString

    11 juin 2018 à 9:05:54

    Bonjour,

    Je cherche à récupérer des données au format string (exemple lecture d'un fichier) et de les convertir en QString pour les utiliser avec des objets Qt.

    Il semble que dans l'application ci-dessous Le QString ne récupère pas la variable string. Il s'en suit que le split ne peut pas s'effectuer et qu rien ne s'affiche dans les 2 boutons.

    #include <QApplication>
    #include <QPushButton>
    #include <QWidget>
    #include <QFont>
    #include <QIcon>
    #include <QStringList>
    #include <string>
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        QWidget fenetre;
        fenetre.setFixedSize(300, 150);
    
        // Simule la récupération de données en string
        std::string sTexte = "Toto|Titi|Tutu|Tata|Tete";
        // Convertir le string en QString ???
        QString *vTexte = new QString;
        vTexte->fromStdString(sTexte);
        // Eclater la liste
        QStringList liste = vTexte->split('|');
    
        // Ecrire la 1ère occurence dans le 1er bouton
        QPushButton bouton(liste[0], &fenetre);
        bouton.setFont(QFont("Comic Sans MS", 14));
        bouton.setCursor(Qt::PointingHandCursor);
        bouton.setIcon(QIcon("Icones/smile.png"));
        // setGeometry(abscisse, ordonnee, largeur, hauteur);
        bouton.setGeometry(60, 30, 180, 50);
    
        // Ecrire la 2nde occurence dans le 2nd bouton
        // J'ai mis [0] pour éviter l'erreur de dépassement de capacité
        QPushButton autreBouton(liste[0], &fenetre);
        // setGeometry(abscisse, ordonnee, largeur, hauteur);
        autreBouton.setGeometry(60, 90, 180, 50);
    
        fenetre.show();
    
        return app.exec();
    }
    

    Merci de m'apporter votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      11 juin 2018 à 9:20:40

      N'utilises par un pointeur avec std::string ou QString (et plus généralement avec les classes a semantique de valeur)

      fromStdString est une fonction static (cf la doc). Donc il faut ecrire :

      const std::string sTexte = "Toto|Titi|Tutu|Tata|Tete";
      const QString vTexte = QString::fromStdString(sTexte);
      QStringList liste = vTexte.split('|');

      Par contre, ce type de conversion est couteux. Si tu n'as pas une bonne raison de faire ca, utilises des QString partout.

      • Partager sur Facebook
      • Partager sur Twitter
        11 juin 2018 à 10:01:30

        Merci de ton aide.

        Peut-on lire un fichier .txt en utilisant des méthodes faisant appel à des QString ?

        • Partager sur Facebook
        • Partager sur Twitter
          11 juin 2018 à 11:41:11

          Oui, avec QTextStream. (Ou alors via QFile::readAll puis conversion de QByteArray en QString)

          -
          Edité par gbdivers 11 juin 2018 à 11:41:34

          • Partager sur Facebook
          • Partager sur Twitter
            11 juin 2018 à 11:48:29

            Merci beaucoup pour toutes ces informations. Je vais de ce pas les mettre en application.
            • Partager sur Facebook
            • Partager sur Twitter
              11 juin 2018 à 23:00:11

              Salut,

              j'aimerai juste rajouter aux  conseils de @gbdivers,

              il n'utilise surtout pas une tel déclaration: 

              QString mot;

              le pourquoi est que tu ne connais pas l'encodage utiliser par la source de tes caractères, je m'explique:

              supposons que tu souhaite lire un fichier .txt, ici  l'encodage de caractères sera égale à l'encodage utiliser lors de l'écriture de ce fichier.

              Nota: si l'encodage utiliser à la source(lors de l'écriture ou saisie) est du UTF-8, utilise:

              QString chaine = QString::fromUtf8("ma chaine utilisant l'encodage UTF-8");
              et tu as beaucoup d'autre fonction statique pour traiter l'encodage de tes caractères.
              • Partager sur Facebook
              • Partager sur Twitter

              Ton présent détermine ton futur et la connaissance te placera au dessus de ta génération .

              C++ Qt

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown