Qt4: récupérer QLineEdit puis créer dossier??

Résolu
Bonjour tout le monde !!!

alors voila. je cherche a récupérer la valeur entré dans un QLineEdit, pour ensuite créer un dossier portant le nom de cette valeur.

donc je récupère mon QLineEdit:

QString mois=mois1->text();


et la je crée un dossier:

QObject* parent = new QObject();
    QString program = "mkdir";
    QStringList arguments;
    arguments << "/home/clem/+ mois";
    QProcess *mkdirProcess = new QProcess(parent);
    mkdirProcess->start(program, arguments);


Donc voila, à la ligne arguments, j'essaie d'appeler la variable contenant le QLineEdit pour le nom du dossier mais ca ne fonctionne pas.

j'ai tenté ca aussi
arguments << "/home/clem/"+ mois;
mais vous vous doutez bien qu'il n'a pas aimé.

je ne sais pas du tout comment fair... je continue a chercher de mon coté

Merci d'avance a ceux qui pourront m'aiguiller ;) ;)

7 réponses

  1. Contributeur
    ce que tu cherches à faire c'est QString( "/home/clem/"+ mois).splot();
    mais utiliser QProcess avec mkdir, c'est mal, car non portable.
    Utilise directement la commande mkdir ou mkpath de la classe QDir :
    https://doc.qt.io/archives/qt-4.8/qdir.html
    C'est plus portable, plus propre et plus simple.
    0
    1. Merci je vais regarder ca, là j'étais partis pour lancer un bash au clic d'un bouton qui aurait traité un fichier ecrit plus tot par QFile contenant tout le formulaire xD

      et c'est pour un petit prog perso qui serait utilisé sur linux ou mac donc la portabilité n'est pas mein soucein

      encore Merci ;) ;)
      0
      1. Contributeur
        la portabilité ce n'est pas que "spatiale" (entre OS) mais aussi temporelle, si mkdir change ton programme ne fonctionnera plus. Qt est une bibliothèque très complète, il est rare de devoir passer par autre chose.
        Au début, je programmais un peu comme toi, puis je me suis rendu compte que ça me limitait et ça me compliquait la vie inutilement.
        0
    2. hello!!

      je me permet de te relancer pour mon prob avec Qt, quand je place

      QString("/home/clem" + mois1).split(); le compilateur me sort une erreur qui me dit invalide operande +.

      de plus, j'utilise ca

      QFile file("/home/clem/QT/test.txt");
      if(file.open(QIODevice::WriteOnly))
      {
      file.write(mois1->text());
      file.write(temps1->text());
      file.write(tempMin1->text());
      file.write(tempMax1->text());
      file.write(precipitation1->text());
      file.write(note1->toPlainText());

      file.close();
      }

      mais impossible d'avoir un saut de ligne dans mon fichier.

      file.write(mois1->text()) + "\n";

      ne fonctionne pas, alors j'ai essayé de le placer un peu partout mais... rien.

      mais la je viens de me rendre compte que on prog ne fonctionne meme plus... il me sort une erreur QIODevice alors que ca fonctionnait parfaitement.

      Et merci du consei sur la portabilité (je débute ;) )
      0
      1. Contributeur
        Salut.
        Oui, en effet, c'est "mois" ou "mois1->text()" qu'il faut lui fournir, sinon en effet l'opérateur plus n'est pas défini.
        Tu fais une erreur de parenthèses, pour le retour à la ligne :
        file.write(mois1->text() + "\n" );
        0
        1. il me semble avoir déjà testé sous cette forme mais je vais le refaire. par contre là (sans saut a la ligne) mon code ne fonctionne plus...

          extrait de msg err:

          /fenetrePrincipale.cpp: In member function `void fenetrePrincipale::genFile1()':
          ../PanteObs4/fenetrePrincipale.cpp:130:33: erreur: no matching function for call to `QFile::write(QString)'
          ../PanteObs4/fenetrePrincipale.cpp:130:33: note: candidates are:
          /usr/include/qt4/QtCore/qiodevice.h:124:12: note: qint64 QIODevice::write(const char*, qint64)
          /usr/include/qt4/QtCore/qiodevice.h:124:12: note:   candidate expects 2 arguments, 1 provided
          0
          1. Contributeur
            la solution est là : candidates are:
            /usr/include/qt4/QtCore/qiodevice.h:124:12: note: qint64 QIODevice::write(const char*, qint64)
            test ça :
            file.write(_var_->text().ascii() );
            J'avoue qu'un des truc pas top en QT c'est l'écriture/lecture des fichiers. Si tu veux, je peux te passer un petit exemple.
            0
          2. xD a ok je vois, j'ai fait sauter le .toUTF8 de chaque ligne pour tester le "\n"
            et oui je suis preneur d'un petit exemple :)

            Merci pour ton aide ... Précieuse :D
            0
        2. Contributeur
          QFile fs(QDir::home().absPath()+"/essaiccm.txt");
          fs.open(IO_WriteOnly);
          QTextStream ffs(&fs);
          ffs<<"texte à ecrire dans le fichier\n";
          fs.close();
          J'avoue que je n'ai jamais compris l'intéret de passer par QTextStream, mais c'est ainsi que c'est fait dans la documentation.
          Tu devrais d'ailleur lire au maximum la documentation qui est bien faite et comporte pas mal d'exemples.
          0
          1. au risque de passer pour un gros naz, je ne comprend pas toujours la doc qt que je m'efforce pourtant de lire (par exemple avant de poster mon prob ici j'ai bien chercher pdt 2 jours)

            notamment ce qui me pose problème et que je n'ai pas encore saisi c''est pour le passage de variable récupéré de widget comme QLineEdit QTextEdit et tout ca. par exemple, dans ton exemple comment passer ma variable +mois1 dans ffs << "text";

            et surtout ffs je epux le declarer plusieurs fois? (là mon but c'est de recup un formulaire
            mois
            temps
            temp. min
            temp. max
            precipitation
            note
            0
          2. Contributeur
            Je ne comprends pas ton problème (moi non plus je ne comprends pas toujours la doc, mais c'est souvent qu'il me manque un concept).
            ffs est un flux, tu l'utilises comme tel. Tout comme cout.
            0
        3. maintenant reste a melangé le
          file.write(_var_->text().ascii() ); avec le file.write(mois1->text()) + "\n";

          pour pouvoir sauter un ligne;
          j'ai testé ca file.write(mois1->text() + "\n".toUtf8); ca ne passe pas xD
          0
          1. Contributeur
            avec des parenthèses, ça devrai le faire :
            file.write((mois1->text() + "\n").toUtf8());
            0
          2. le boulet!!! bon j'ai encore pleins de chose a apprendre (surtout a bien vérifier la ponctuation.)

            Merci les yvelines ;) (jsuis de sartrouville)
            0

        Discussions similaires

        Qt4 : QLineEdit

        2 réponses