Qt: kleiner fehler beim kompillieren



  • this is what i get:

    .moc/moc_form1.cpp: In member function `virtual bool Form1::qt_invoke(int, QUObject*)':
    /opt/qt/include/qprocess.h:168: Fehler: »QProcess::QProcess(const QProcess&)« ist privat
    .moc/moc_form1.cpp:143: Fehler: in diesem Zusammenhang
    /opt/qt/include/qprocess.h:168: Fehler: »QProcess::QProcess(const QProcess&)« ist privat
    .moc/moc_form1.cpp:143: Fehler: in diesem Zusammenhang
    /opt/qt/include/qprocess.h:168: Fehler: »QProcess::QProcess(const QProcess&)« ist privat
    .moc/moc_form1.cpp:143: Fehler: in diesem Zusammenhang
    .moc/moc_form1.cpp:143: Fehler:   Argument 1 von »virtual void Form1::ready(QProcess)« wird initialisiert
    make: *** [.obj/moc_form1.o] Fehler 1
    

    und das der code: (schnipsel)

    void Form1::go_conf(QString path, QString  name, QString arg) //
    {  
        QProcess prc;
        prc.addArgument(name);
    
        connect(&prc, SIGNAL(readyReadStdout()), this, SLOT(ready(prc) ) );
        connect(&prc, SIGNAL(processExited()), this, SLOT(finish() ) );   
        choice = 'm';
    
        chdir(path); prc.start();
    }
    
    void Form1::ready(QProcess x) 
    {
      while (x.canReadLineStdout() ) {
         textEdit_log->append(x.readLineStdout() );
      }  
    }
    

    das problem schein bei ready zu liegen.
    ursprünglich war der prozess (prc und x bei ready) eine private variable. da ready aber verschiedene prozesse behandeln sollte (make und make install->da wurde immer wieder configure ausgeführt 😞 ) habe ich auf die private variable verzichtet.
    und nun bekomm ich diesen fehler. ich frag ja nicht oft nach korrekturen, aber was ist hier falsch?



  • Ja das bedeutet das QProcess nicht kopiert werden kann, wenn du das übergibst dann solltest du es als referenz übergeben

    void Form1::ready(QProcess & x)
    

    <-- das & ist ausschlaggebend.



  • Dein QProcess ist eine lokale Variable. Die ist nicht mehr gültig, nachdem die go_conf Funktion gestartet wurde. Und das readyReadStdout Signal hat keinen Parameter, so dass du das nicht an den ready slot übergeben darfst.

    Wenn du die Prozesse nicht gleichzeitig ausführst kannst du mit einem QProcess Objekt nacheinander alle abarbeiten und innerhalb von ready abfragen, was gerade gemacht wird.



  • das ging ja schnell!

    Dein QProcess ist eine lokale Variable. Die ist nicht mehr gültig, nachdem die go_conf Funktion gestartet wurde. Und das readyReadStdout Signal hat keinen Parameter, so dass du das nicht an den ready slot übergeben darfst.

    uups 🙂

    .ui/form1.h:71: Fehler: candidate is: virtual void Form1::ready(QProcess)
    .ui/../form1.ui.h:35: Warnung: nicht benutzter Parameter »arg«
    make: *** [.obj/form1.o] Fehler 1
    

    Wenn du die Prozesse nicht gleichzeitig ausführst kannst du mit einem QProcess Objekt nacheinander alle abarbeiten und innerhalb von ready abfragen, was gerade gemacht wird.

    ich versteh nicht ganz 🤡 😞



  • diddy_k schrieb:

    Wenn du die Prozesse nicht gleichzeitig ausführst kannst du mit einem QProcess Objekt nacheinander alle abarbeiten und innerhalb von ready abfragen, was gerade gemacht wird.

    ich versteh nicht ganz 🤡 😞

    Du legst dir halt ein QProcess in deiner Klasse an und benutzt dieses für die verschiedenen Aufgaben.



  • das will ich aber nicht ⚠



  • diddy_k schrieb:

    das will ich aber nicht ⚠

    Und warum nicht? Willst du mehrere Prozesse gleichzeitig starten?



  • nein ich wollte eine fkt. mehrfach nutzen und nicht alles in eine packen. aber das wird wohlnicht anders gehen.



  • wenn ich es so mache passiert irgendwie nischt!?

    void Form1::go_conf(QString path, QString  name, QString arg) //
    {  
        QProcess prc;
        prc.addArgument(name);
    
        connect(&prc, SIGNAL(processExited()), this, SLOT(finish() ) );   
        choice = 'm';
    
        chdir(path); prc.start();
    
        while (prc.canReadLineStdout() ) {
    	textEdit_log->append(prc.readLineStdout() );
        }  
    }
    


  • Schau dir die folgende Diskussion und das zuletzt gepostete Programm an:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-114355-and-start-is-10.html



  • das sollte eher der demo dienen!(rechfertigend)
    na gut ich hab ja jetzt ein paar process objekte erstellt. aber schade ist das man kann man das alte prc nicht auf irgend eine art und weise mit einer set-fkt. überschreiben???



  • Hast du dir mal die Doku zu QProcess angeschaut? Wie steht es mit clearArguments()?



  • uups, thx!


Log in to reply