externes Programm starten.

Alles rund um die Programmierung mit Qt
Antworten
greenghecco
Beiträge: 24
Registriert: 7. Juli 2010 14:31

externes Programm starten.

Beitrag von greenghecco »

Hallo ich will wgnuplot direkt aus einer Qt anwendung starten. Ich nutze Qt creator und win7 64bit.

mein code sieht folgendermaßen aus:

Code: Alles auswählen

QString program = "C:\\Users\\wgnuplot.exe";
     QStringList arguments;
     arguments << "C:\\Users\\out.plt";
        
     QObject *parent;
     QProcess *myProcess = new QProcess(parent=0);

     myProcess->start(program, arguments);
     int kappa = myProcess->state();
Mein Problem ist das wgnuplot in einem eigenen Fenster starten soll. Kappa sagt das das Programm gestartet ist (int ist 2). Also weiss nur wie ich das in VS2008 mache mit shellexecute und dann den parameter SW_SHOWNORMAL. Leider öffnet sich wgnuplot nicht. danke für hilfe
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag von RavenIV »

Das Zauberword heisst startDetached(...)
Linux, das längste Text-Adventure aller Zeiten
greenghecco
Beiträge: 24
Registriert: 7. Juli 2010 14:31

Beitrag von greenghecco »

Code:

Code: Alles auswählen


...
  QString program = "C:\\Users\\wgnuplot.exe";
     QStringList arguments;
     arguments << "C:\\Users\\out.plt";


     QObject *parent;
     QProcess *myProcess = new QProcess(this);

     myProcess->startDetached(program, arguments);


     int kappa = myProcess->state();
...

Ohne Argumente startet das Programm, scheint wohl daran zu liegen. Weiss jemand ob es restriktionen dabei gibt. Will wgnuplot die scriptfile übergeben. Rufe ich also

Code: Alles auswählen

myProcess->startDetached(program);
startet wgnuplot. Wenn die Argumente wieder da sind. Zuck die Gui nur kurz, aber kein gnuplot geht auf.
MiKla
Beiträge: 134
Registriert: 29. Juli 2007 15:29

Beitrag von MiKla »

Könnte es sein, dass Dein Gnuplot Script kein "Pause" drinnen hat und somit gleich wieder beendet wird ;-)

Michael
greenghecco
Beiträge: 24
Registriert: 7. Juli 2010 14:31

Beitrag von greenghecco »

selbstverständlich ;), aber es geht ja ein neues window auf und die ergebnisse angezeigt werden ;).

Hier zur info mal das script:

Code: Alles auswählen

set title 'CPU usage of node'
set yrange[0:100]
set xlabel 'time'
set term posts "Times-Roman" 20
set boxwidth 5
set mxtics
set xlabel 'time'
plot 'result.txt' with boxes lt 1 lw 4
set terminal windows
replot
Und wenn ich nur gnuplot starte bleibt es auch aktiv. wenn ich dann load das script mache geht das.
MiKla
Beiträge: 134
Registriert: 29. Juli 2007 15:29

Beitrag von MiKla »

Mach doch mal ein

Code: Alles auswählen

 pause -1 
am Ende rein ;-)
Michael
greenghecco
Beiträge: 24
Registriert: 7. Juli 2010 14:31

Beitrag von greenghecco »

hm danke, probier ich gleich morgen aus;). Leider immer nur noch ein kurzes zucken der GUI. Code wie folgt:

Code: Alles auswählen

set title 'MEM usage of node'
set yrange[0:100]
set xlabel 'time'
set term posts "Times-Roman" 20
set boxwidth 5
set mxtics
set xlabel 'time'
plot 'result.txt' with boxes lt 1 lw 4
set terminal windows
replot
pause -1
MiKla
Beiträge: 134
Registriert: 29. Juli 2007 15:29

Beitrag von MiKla »

ich habe gerade da bei mir mal getestet:

Code: Alles auswählen

void MainWindow::on_pushButton_clicked()
{
    QProcess *gnuplot = new QProcess(this);
    QStringList arg;
    arg << "c:/KLM/src/TraConvertQt/plot.plt";
    gnuplot->setWorkingDirectory ("c:/KLM/src/TraConvertQt");
    gnuplot->startDetached ("c:/Programme/gnuplot/binary/wgnuplot.exe", arg);
    gnuplot->waitForFinished ();
}
mit

Code: Alles auswählen

set terminal png medium size 1024,768

cd 'c:\klm\src\TraConvertQt\'

set style data lines

set title "Technica Spindel"
set autoscale
set y2tics
set ylabel "Drehzalistwert [U/min]"
set y2label "Momentistwert [%Mn]"
set xlabel "Zeit [ms]"


set output "Trace_N25000_5000ms_R06.tra.csv.png"
plot    'Trace_N25000_5000ms_R06.tra.csv' using 2:($3*0.0001) t "Drehzahlistwert [U/min]", 'Trace_N25000_5000ms_R06.tra.csv' using 2:($4*0.1) axes x1y2 t "Momentistwert [%Mn]"


set terminal win
set output
replot
pause -1 "Press Enter to continue..."
Das funktioniert bei mir. Du kannst als erstes testen ob Dein Script passt, in dem Du Deinen Aufruf in einer Konsole startest, wenn das schon nicht geht, dann stimmt was nicht. Meisstens stimmt ein Pfad nicht.

[edit]

Code: Alles auswählen

    gnuplot->waitForFinished ();
ist nicht notwendig.

Michael
greenghecco
Beiträge: 24
Registriert: 7. Juli 2010 14:31

Beitrag von greenghecco »

hm klingt alles plausibel, hab bestimmt irgendeinen dummen fehler irgendwo. So nach langem hin und her gezigge, war der fehler. das im script das cd PFAD gefehlt hatte. Und man darf dort nicht C:\ angeben. Es muss c:/sein. Denke wie bei linux. Auch wenn man es unter windows hat. Also noch mal Super dank an Michael!! Es lag also an den Pfaden. Im Script muss der Pfad nochmal angeben werden. Was bei mir irreführend war, da gnuplot im selben ordner lag. Danke Michael! :!: [/code]
Antworten