Anzeige:
Ergebnis 1 bis 7 von 7

Thema: QProcess <incomplete type> ?

  1. #1
    Registrierter Benutzer Avatar von central
    Registriert seit
    10.03.2006
    Ort
    Norderstedt
    Beiträge
    8

    QProcess <incomplete type> ?

    Hallo ,
    habe einen kleines Problem und würde mich über Hilfe freuen,
    es geht um folgendes .
    Ich habe ein commandline tool (obexftp) für das ich gerade eine Oberfläche schreibe.
    Die Befehle setzte ich über QProcess ab .
    verbinde mit dem Signal processExited um das Ende des processes mitzubekommen.
    wenn ich nun in einer konsole
    Code:
     obexftp -b 00:00:01:AD:FE -B 10 -l
    eingebe dauert es bis zur Abarbeitung ca 2 Sek.
    wenn ich nun das im meine Programm über
    Code:
    proc=new QProcess(this);
    proc->addArgument( "obexftp" );
    proc-> addArgument( "-b" );
    proc-> addArgument( " 00:00:01:AD:FE" );
    proc-> addArgument( "-B" );
    proc->  addArgument( "-l" );
    connect( proc, SIGNAL(readyReadStdout()),
                this, SLOT(readFromStdout()) );
     connect( proc, SIGNAL(processExited()),
                this, SLOT(processEnde()) );
    dauert das etwa 12 Sek.
    nachdem ich debugt habe , habe ich erfahren
    { "proc", "struct QProcess *", "<incomplete type>" }
    warum woran liegt das ? was mache verkehrt ?

    gruß

    central
    Geändert von central (11-03-2006 um 14:02 Uhr)

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ohne mehr Code kann man nicht viel sagen.

    Übrigens gibt es glaub ich eine liboebx, also die Möglichkeit direkt selber ein Programm zu schreiben

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer Avatar von central
    Registriert seit
    10.03.2006
    Ort
    Norderstedt
    Beiträge
    8
    OK kein Problem,
    das ist der Button zum starten
    Code:
    void corepushWDG::useDevice_Slot()
    {
    
    progressBar1->setProgress(0);
    
    QTextStream btst(&btdevice);
    
    if( !btdevice.open( IO_WriteOnly  ) )
     {
        QMessageBox::critical( 0,
                    tr("Fatal error"),
                    tr("Could not open file."),
                    tr("Quit") );
            exit( -1 );
         } 
       //cout << endl;
    btst << comboBox1->currentText() << endl; // die ID from phone
    btdevice.close();
    //sleep(1);
    useDeviceB->setFlat(true);
    acces();
    proc-> addArgument( "-l" );
    
    
    connect( proc, SIGNAL(readyReadStdout()),
                this, SLOT(readFromStdout()) );
    //connect( proc, SIGNAL(readyReadStderr()),
      //       this, SLOT(readFromStderr()) );
     connect( proc, SIGNAL(processExited()),
                this, SLOT(processEnde()) );
    
        if ( !proc->start() ) {
            // error handling
       
            QMessageBox::critical( 0,
                    tr("Fatal error"),
                    tr("could not start obexftp"),
       tr("Quit") );
            exit( -1 );
        }
    
    }
    und hier access
    Code:
    void corepushWDG::acces()
    {
    proc=new QProcess(this);
    //proc->clearArguments ();
    proc->addArgument( "obexftp" );
    proc-> addArgument( "-b" );
    proc-> addArgument(comboBox1->currentText());
    proc-> addArgument( "-B" );
    switch (int i = comboBox2->currentItem())
    {
    case 0: proc-> addArgument( "12" );
    textLabel1->setText("nokia selectet channel 12");
    break;
    case 1: proc-> addArgument( "10" );
    textLabel1->setText("siemens selectet channel 9");
    break;
    case 2: proc-> addArgument( "7" );
    textLabel1->setText("ericcson selectet channel 10");
    break;
    case 3:proc-> addArgument("5");
    textLabel1->setText("siemens selectet channel 9");
    break;
    }
    }
    im header
    nur mal das relevante
    Code:
    public slots:
    virtual void          readFromStdout();
      virtual void           processEnde();
      virtual void           useDevice_Slot();
    virtual void           acces();
    
    protected:
      /*$PROTECTED_FUNCTIONS$*/
    
    QProcess *proc;
    das dürfte eigentlich alles relevant sein wenn du noch was brauchst keine Problem
    bin ja schon mal froh das jemand überhaupt schaut

    Übrigens gibt es glaub ich eine liboebx, also die Möglichkeit direkt selber ein Programm zu schreiben
    Ja, ist richtig heißt libopenobex.
    Ist aber wohl um einiges schwerer und aufwendiger als ein frontend zu schreiben.

    gruß

    central
    Geändert von central (11-03-2006 um 14:07 Uhr)

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von central
    connect( proc, SIGNAL(readyReadStdout()),
    this, SLOT(readFromStdout()) );
    //connect( proc, SIGNAL(readyReadStderr()),
    // this, SLOT(readFromStderr()) );
    connect( proc, SIGNAL(processExited()),
    this, SLOT(processEnde()) );
    Wie sehen denn die beiden Slots aus?

    Ja, ist richtig heißt libopenobex.
    Ist aber wohl um einiges schwerer und aufwendiger als ein frontend zu schreiben.
    Nicht unbedingt. Ich glaub irgendwo im KDE SVN (vielleicht playground oder kdenonbeta) mal Qt Code dafür gesehen zu haben, vermutlich eben auch für ein Obex Frontend.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer Avatar von central
    Registriert seit
    10.03.2006
    Ort
    Norderstedt
    Beiträge
    8
    Hm,
    also der Slot readFromStdout()
    {
    }
    ist leer

    und der Slot processEnde()
    ist momentan ziemlich unerheblich da das Problem ja vorher schon liegt.
    Also es dauert ca 12 sek bis das Signal ProcessExited kommt und erst dann
    bearbeite ich die Daten was innerhalb einer Sek. abgearbeitet ist .

    wenn Du eine Idee hast warum der Process solange braucht bis er ein ProcessExited sendet oder eine Idee wie ich das abkürzen könnte wäre ich dir echt dankbar.

    gruß

    central
    debian etch
    qt 3,3,5

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Hmm, leider keine echte Idee woran das liegen könnte.

    Vielleicht ist das nicht Lesen der Ausgabe ein Verzögerungsgrund.
    Allerdings wäre mir ein solches Verhalten bisher unbekannt.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer Avatar von central
    Registriert seit
    10.03.2006
    Ort
    Norderstedt
    Beiträge
    8
    Gefahr erkannt Gefahr gebannt
    Das Problem war das in der Zeile
    Code:
    proc -> addArgument (combox1->currentText());
    wohl am ende noch Leerzeilen enthalten waren
    wieso, weshalb, warum weiß keiner so genau
    Die Lösung
    Code:
    proc -> addArgument (combox1->currentText().simplifyWhiteSpace());
    gruß

    central
    debian etch
    qt 3,3,5

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •