Partage
  • Partager sur Facebook
  • Partager sur Twitter

Qtcreator: qprocess

Récupérer la sortie d'un programme externe dans Qtcreator

    19 septembre 2021 à 17:19:42

    Bonjour,

    Je souhaite récupérer les données d'un programme en C++ externe appelé "./test" vers mon programme Qtcreator à l'aide de Qprocess.

    Exemple de mon code externe C++:

    #include <iostream>
    #include <iostream>
    #include "ZFraction.h"
    
    using namespace std;
    
    int main()
    {
        ZFraction a(4,5);      
        ZFraction b(2);        
        ZFraction c,d;         
    
       c = a+b;              
       d = a*b;               
    
        cout << a << " + " << b << " = " << c << endl;
    
        cout << a << " * " << b << " = " << d << endl;
    
        return 0;
    }

    Mon code dans Qtcreator:

    #include "mafenetre.h"
    #include "ui_mafenetre.h"
    
    //using namespace QtCharts;
    
    const quint64 start=QDateTime::currentSecsSinceEpoch();
    const int limiteRandom=2;
    
    
    Mafenetre::Mafenetre(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Mafenetre)
    {
        ui->setupUi(this);
        myprocess = new QProcess(this);
        
    
        QString program = ("./test");
        arguments << " ";
    
        myprocess->start(program, arguments);
        //myprocess->waitForReadyRead();
    
        connect(monTimer,SIGNAL(timeout()),this,SLOT(refresh_graph()));
        connect(myprocess,SIGNAL(readyReadStandardOutput()),this,SLOT(readyReadStandardOutput()));
        connect(myprocess,SIGNAL(readyReadStandardError()),this,SLOT(readyReadStandardError()));
    }
    
    void Mafenetre::readyReadStandardOutput(){
        qDebug()<< myprocess->readAllStandardOutput();
     
    }
    
    void Mafenetre::readyReadStandardError(){
        qDebug() << myprocess->readAllStandardError();
    }
    
    Mafenetre::~Mafenetre()
    {
        delete ui;
    }

    Je m'attends ici à recevoir dans le terminal de Qtcreator la sortie de mon programme et essayer d'en récupérer le résultat mais rien ne s'affiche.

    Comment procéder si je souhaite récupérer les données de mes variables "c" et "d" dans mon programme Qt ?


    • Partager sur Facebook
    • Partager sur Twitter
      20 septembre 2021 à 8:25:15

      Salut, je ne connais pas QProcess mais en regardant la doc de la fonction start on voit que QProcess émet le signal started() si il a réussit à start le programme et qu'il émet le signal errorOccured() si il a échoué 

      Peut-être que tu pourrais commencer par connecter ces deux signaux à une fonction qui te permettrait d'afficher si tu as réussis à start le programme ou pas et en cas d'echec tu utilises l'enum en paramètre de errorOccured (doc ici) pour afficher ce qu'il ne va pas. Ca sera déjà un bon début 

      Si le programme ne se lance pas, je miserai sur le fait qu'il ne le trouve pas. En effet, je pense que le premier paramètre de start doit être le chemin d'accès au programme dans ton PC et de mémoire je crois que "./test" c'est juste la commande pour éxécuter le programme compilé en ligne de commande (sous réserve d'être dans le bon répertoir déjà)

      Donc je pense que tout soucis peut-venir de là, essaye de remplacer "./test" par le chemin de ton programme. Met un chemin absolue au début pour pas te prendre la tête et faire le test, ensuite tu essaieras de faire un chemin relative parce que c'est quand même mieux 

      -
      Edité par ThibaultVnt 20 septembre 2021 à 8:31:14

      • Partager sur Facebook
      • Partager sur Twitter
        20 septembre 2021 à 10:14:06

        En complément, pour les programmes qui cherchent a être des éléments d'une chaîne de traitement modulaire (les résultats des uns sont les données d'entré des autres), on privilégie une approche à la "Unix" où chaque étape est un programme CONSOLE indépendant et où on chaine les sorties standard des uns vers les entrées standard du suivant dans la chaine.

        Je ne vois rien de cela dans votre "bidule".

        • Partager sur Facebook
        • Partager sur Twitter
        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

        Qtcreator: qprocess

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown