QProcess will nicht .. direkt system() 1sec.

Alles rund um die Programmierung mit Qt
Antworten
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

QProcess will nicht .. direkt system() 1sec.

Beitrag von patrik08 »

ob execute oder startDetached ... geben kein zeichen .... jedoch direkt:

/* system("C:/_excel2sqlinsert/fop/fop.bat c:/asi.fo c:/asi.pdf"); */

gibt es in ca. eine sekunde 8 seite neue pdf....

Code: Alles auswählen

/* external java fop setup & convert */
bool Xslt_Proc::Fopjava( QString fofile , QString pdffile )
{
     xslterrormsg = "Error...! start function....";
     /*   http://xmlgraphics.apache.org/fop/  only java api 
    http://mirror.switch.ch/mirror/apache/dist/xmlgraphics/fop/binaries/fop-0.92beta-bin-jdk1.4.zip */
     javainstall = true;
     /* javainstall = getenv("JAVA_HOME") != 0; */
     if (javainstall) {
      xslterrormsg = QString( "java_dir_found on dir = %1" ).arg( getenv("JAVA_HOME") );
      QString app_sh_or_bat;
      QStringList argumentlist;
      argumentlist << fofile << "," << pdffile;
      QProcess pdf_gen;
#if defined(Q_WS_WIN)
      pdf_gen.setWorkingDirectory(QCoreApplication::applicationDirPath()+"/fop");
      app_sh_or_bat = "fop.bat";
#else
      /* mac linux */
       if (!is_file("/opt/fop/fop")) {
        xslterrormsg = "Error...! fop apache is not install... download a copy on http://xmlgraphics.apache.org/fop/ and copy to /opt/fop/";
         return false;  
       }
      pdf_gen.setWorkingDirectory("/opt/fop");
      app_sh_or_bat = "./fop";
#endif
      /* pdf_gen.startDetached( app_sh_or_bat , argumentlist ); */
      pdf_gen.execute( app_sh_or_bat , argumentlist );
      xslterrormsg = pdf_gen.readAll();
     return true;
     } else {
     /* start java bin installer ....  */
     xslterrormsg = "Error...! Java ist not installed....(JAVA_HOME) not found..";
     return false;
     }
xslterrormsg = "Error...! end function....";
}
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag von Goos »

Du machst das falsch :)

Goos
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

Endlich mit qt3 doc und qt4 doc und die mixed forum beispiele...

so geht es.... als qt4! (schade das die super Guru qt profi .. selten schreiben ob die gegebene beispiele qt3 oder qt4 sind...)

Code: Alles auswählen

void Gui_FrontPage::TestQprocessqt4()
{
    QProcess process;
    process.setReadChannelMode(QProcess::MergedChannels);
    process.start("ipconfig" ,  QStringList() << "/all");
    
    if (!process.waitForFinished()) {
        msgb->information( this , "QT4 function test", process.errorString() );
    } else {
      msgb->information( this , "QT4 function test", process.readAll() );  
    }
      
}
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

patrik08 hat geschrieben:Endlich mit qt3 doc und qt4 doc und die mixed forum beispiele...
Entscheide dich, Qt3 oder Qt4, beides geht nicht. Kein Wunder das du dich so schwer tust, wenn Du das beste aus beiden Welten nehmen willst.
patrik08 hat geschrieben:(schade das die super Guru qt profi .. selten schreiben ob die gegebene beispiele qt3 oder qt4 sind...)

Aus der Doku zu Qt4:

Code: Alles auswählen

        QProcess gzip;
        gzip.start("gzip", QStringList() << "-c");
        if (!gzip.waitForStarted())
            return false;

        gzip.write("Qt rocks!");
        gzip.closeWriteChannel();

        if (!gzip.waitForFinished())
            return false;

        QByteArray result = gzip.readAll();
Ist es wirklich so schwer dieses Beispiel für ipconfig umzuschreiben?

Qt4 ist aktuell, 90% der hier geposteten Beiträge beziehen sich darauf, da schreibt man das nicht extra dabei.
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

trotzdem setWorkingDirectory(dir) geht bei mac und vieleicht auch linux aber auf dem window os gibt er fehler....

und so geht die erstellung von xsl-fo PDF dateien auf mac + win ...

Code: Alles auswählen

/* external java fop setup & convert */
bool Xslt_Proc::Fopjava( QString fofile , QString pdffile )
{
#ifndef JAVA_HOME
#define JAVA_HOME \
              QString( "%1/" ).arg( getenv("JAVA_HOME") )
#endif
    
     /*   http://xmlgraphics.apache.org/fop/  only java api 
    http://mirror.switch.ch/mirror/apache/dist/xmlgraphics/fop/binaries/fop-0.92beta-bin-jdk1.4.zip */

    QString bindirapp;
    #if defined(Q_WS_WIN) 
    bindirapp = QCoreApplication::applicationDirPath()+"/fop/fop.bat";
    #else /* mac linux */ 
    /* test "which fop" */
    bindirapp = "/opt/fop/fop";
    #endif
      if (!is_file(bindirapp)) { 
      xslterrormsg = "Error...! fop apache is not install... download a copy on http://xmlgraphics.apache.org/fop/ and copy to "+bindirapp;   
      return false;
      }
      
      if (JAVA_HOME.size() > 3) {
          
        QProcess process;
        process.setReadChannelMode(QProcess::MergedChannels);
        process.start( bindirapp ,  QStringList() << fofile << pdffile); 
         if (!process.waitForFinished()) {
          xslterrormsg = "Error...! Transormtation! \n" + process.errorString() + "\nprogramm " +bindirapp;
          return false;
         } else {
          xslterrormsg = "Success Transormtation! \n" + process.readAll() + "\nprogramm " +bindirapp;
          return true;
         }
      } else {
      xslterrormsg = "Error...! JAVA is not install.....";
      return false;
      }
}
Antworten