Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt]Convertir un QString en char*

Sujet résolu
    31 décembre 2008 à 18:37:21

    Voila je voudrais convertir un QString en char* je ne sais pas comment mis prendre.

    Pour les curieux(ou curieuses) qui veulent savoir "Pourquoi ?" deux lignes sufiront à tout expliqué(+ l'erreur lors de la compilation)
    QString fentexte = QInputDialog::getText(this, "Texte", "Quel est le texte ?");
    system("Reg add HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\WinLogon /v LegalNoticeText /t REG_SZ /d" + fentexte + " /f");
    


    L'erreur dans la console :
    FenPrincipale.cpp: In member function `void FenPrincipale::ouvrirDialogue2()':
    FenPrincipale.cpp:31: error: cannot convert `const QString' to `const char*' for
     argument `1' to `int system(const char*)'


    Voilà je crois que tout est dit.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      31 décembre 2008 à 18:45:54

      Quelque chose comme const char * chaineC = leString.toAscii()->constData(); devrait faire l'affaire, mais 'i p't-être mieux.

      Citation : Zéroumanie

      system("[...]" + fentexte + " /f");
      
      Tu sais ce que fait l'opérateur + entre deux char* ?
      Pas ce que tu veux en tous cas.
      • Partager sur Facebook
      • Partager sur Twitter
        31 décembre 2008 à 18:54:11

        Merci pour le bout de code

        mais je voudrais savoir que fais + dans ces cas là? c'est la première fois que je l'utilise c'est un teste.
        • Partager sur Facebook
        • Partager sur Twitter
          31 décembre 2008 à 18:57:35

          L'opérateur '+' additionne les adresses des chaines de caractères.
          Pour concaténer des chaines de caractères C-like on utilise strcat ou toute autre fonction ayant un comportement similaire.
          • Partager sur Facebook
          • Partager sur Twitter
          Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
          Anonyme
            31 décembre 2008 à 19:01:08

            Citation : iNaKoll

            Pour concaténer des chaines de caractères C-like on utilise strcat ou toute autre fonction ayant un comportement similaire.

            Oui, où alors on ruse :
            QString fentexte = QInputDialog::getText(this, "Texte", "Quel est le texte ?");
            fentexte = "Reg ... REG_SZ /d" + fentexte + " /f";
            
            system(fentexte.toAscii()->constData());
            // j'ai un doute sur ce que reçois system(), un char* ou un const char*
            // dans le cas du char*, ça sera :
            system(fentexte.toAscii()->data());
            // .
            
            • Partager sur Facebook
            • Partager sur Twitter
              31 décembre 2008 à 19:41:36

              mcarton > Je lui expliquais juste pourquoi ce qu'il faisait était faux.. J'ai jamais dit qu'il devait utiliser strcat pour ça ;)
              Sinon pour ton doute, la conversion non-const > const est implicite.
              • Partager sur Facebook
              • Partager sur Twitter
              Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
              Anonyme
                31 décembre 2008 à 19:46:34

                Citation : iNaKoll

                Sinon pour ton doute, la conversion non-const > const est implicite.

                Oui je sais, mais c'est le contraire dans ce cas (j'ai un const que je veux envoyer à une fonction dont je ne connais pas le... la... 'i un mot pour ça ?).
                Mais il n'a qu'a utiliser data() qui marchera dans les deux cas (c'est juste que moi ça me rendrait maladif :-° moi).
                • Partager sur Facebook
                • Partager sur Twitter
                  31 décembre 2008 à 20:17:39

                  Merci vraiment mcarton car tu m'as aidé énormément sans rien attendre en retour t'es un pilier( et un gros) du forum voir du site du zero !
                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 décembre 2008 à 21:13:11

                    Ca c'est du remerciement ! Je suis jaloux ! ^^

                    system("PAUSE"); ne fonctionnerait pas si system ne prenait pas un const char* en paramètre. Je dis ça, je dis rien ! :-°
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
                    Anonyme
                      31 décembre 2008 à 21:25:32

                      Citation : iNaKoll

                      system("PAUSE"); ne fonctionnerait pas si system ne prenait pas un const char* en paramètre. Je dis ça, je dis rien ! :-°

                      Pff ! Mais qu'il est con ! (je parle de moi bien sûr :honte: )
                      • Partager sur Facebook
                      • Partager sur Twitter
                        31 décembre 2008 à 21:29:58

                        Mais non tu m'a aider mais regarde tous mes forum (ou prèsque) et tu veras mcarton comme quoi il m'aide très souvent.Mais merci à toi aussi évidament ^^ .
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          31 décembre 2008 à 21:35:53

                          Tiens, pendant que j'y pense : le problème est résolu non ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            31 décembre 2008 à 22:35:44

                            Mouais pas tout à fais Je te redonnes mon code,je ne peux enregistrer qu'un seul mot pas deux sinon ca ne créer(ou modifi)pas la valeur.Tu ne saurais pas pourquoi ?(par hasard

                            void FenPrincipal::Dialogue1()
                            {
                                bool ok = false;
                                QString fentitre = QInputDialog::getText(this, "Titre", "Quel est le titre ?", QLineEdit::Normal, QString(), &ok);
                                fentitre = "Reg add HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\WinLogon /v LegalNoticeCaption /t REG_SZ /d " + fentitre + " /f";
                                system(fentitre.toAscii().data());
                                if (ok && !fentitre.isEmpty())
                                {
                                Dialogue2();
                                }
                            
                            }
                            void FenPrincipal::Dialogue2()
                            {
                            //fentexte  
                                bool ok = false;
                                QString fentexte = QInputDialog::getText(this, "Texte", "Quel est le texte ?", QLineEdit::Normal, QString(), &ok);
                                fentexte = "Reg add HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\WinLogon /v LegalNoticeText /t REG_SZ /d " + fentexte + " /f";
                                system(fentexte.toAscii().data());
                                if (ok && !fentexte.isEmpty())
                                {
                            
                                }
                            
                            }
                            
                            • Partager sur Facebook
                            • Partager sur Twitter
                              31 décembre 2008 à 22:40:30

                              Et bien ouvrirDialogue2() n'ouvre pas Dialogue2(), ça peut être problématique...
                              • Partager sur Facebook
                              • Partager sur Twitter
                                1 janvier 2009 à 10:39:51

                                Yes corriger merci.
                                Juste un truck j'ai trouvé l'erreur ca viens de QLineEdit il ne prend qu'un seul mot donc je crois qu'il faux le remplacer par QTexteEdit mais je n'y arrive pas:

                                FenPrincipale.cpp: In member function `void FenPrincipale::Dialogue1()':
                                FenPrincipale.cpp:19: error: `Normal' is not a member of `QTextEdit'
                                FenPrincipale.cpp: In member function `void FenPrincipale::Dialogue2()':
                                FenPrincipale.cpp:32: error: `Normal' is not a member of `QTextEdit'


                                J'ai chercher dans la doc rien trouver pour remplacer "Normal".(rien trouver qui fonctionne)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  1 janvier 2009 à 18:58:38

                                  Quelles sont les lignes 19 et 32 ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    1 janvier 2009 à 20:46:09

                                    Tous de suite:

                                    QString fentitre = QInputDialog::getText(this, "Titre", "Quel est le titre ?", QTextEdit::Normal, QString(), &ok);
                                    
                                    //et
                                    
                                    QString fentitre = QInputDialog::getText(this, "Texte", "Quel est le texte ?", QTextEdit::Normal, QString(), &ok);
                                    


                                    J'imagine que l'erreur vien de "QTextEdit::Normal".
                                    Les noms (des QString sont les méme) mais ca ne cause pas d'erreur.(j'ai tellement chercher pourquoi je ne pouvais pas mettre un texte alors que je pouvais méttre un titre, que j'ai fini par copier collé le code du titre(avec des changements rares) :-° )
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      2 janvier 2009 à 20:22:23

                                      Citation : Zéroumanie

                                      QString fentitre = QInputDialog::getText(this, "Titre", "Quel est le titre ?", QTextEdit::Normal, QString(), &ok);
                                      
                                      C'est censé faire quoi ? La doc n'est pas faite pour décorer.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        2 janvier 2009 à 20:24:08

                                        remplace ceci
                                        QTextEdit::Normal
                                        

                                        par ceci
                                        QLineEdit::Normal
                                        
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          3 janvier 2009 à 10:27:40

                                          Ok mais je ne dois pas avoir compris la doc puisque Si je tape "QLineEdit::Normal",dans le programme, l'utilisateur ne poura entrer qu'un seul mot.Je ne pourais enregistrer le texte que l'utilisateur tape.J'espère avoir été précis sur mon problème :) .Merci pour votre aide à tous.

                                          mcartoon:c'était censé[...]être une erreur[...](je savais d'où venait l'erreur mais pas comment la réparer).
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            3 janvier 2009 à 12:07:53

                                            Citation : Zéroumanie

                                            l'utilisateur ne poura entrer qu'un seul mot

                                            Non, autant de mot qu'il veut, mais une seule ligne.

                                            Mais cet argument sert à dire que le dialog servira à taper un mot de passe et qu'il ne faut pas mettre les lettres mais des étoiles (********) à la place, qu'il ne faut rien mettre du tout, ou simplement, avec QLineEdit::Normal qu'il faut écrire normalement.
                                            Tu ne peut pas décider avec que ça affichera un QTextEdit à la place d'un QLineEdit.
                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            [Qt]Convertir un QString en char*

                                            × 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