ich möchte mein Simulationsprogramm das eine GUI mit Qt besitzt, von Kommandozeile aus starten.
In der grafischen Oberfläche muss ich vor dem Start eine Datei laden durch Klick auf einen ersten Button und zum Start auf einen zweiten Button drücken. Dies soll von der Kommandozeile her durch Aufruf des Qt-Programms mit einem Parameter möglich sein.
Das GUI-Programm heißt IP_Simulation und wird folgendermaßen bedient:
Button1, "Workspacedatei" ---> Laden der Datei durch readWkspFile()
Button2, "Start" ---> Start der Simulation mit den Angaben in der Workspacedatei
von der Kommandozeile stelle ich mir das so vor:
./IP_Simulation name_of_workspacedatei
Meine bisherige "Lösung", die nicht funktioniert:
in main.cpp:
Code: Alles auswählen
int main(int argc, char *argv[])
{
int i;
printf("%d Parameter:\n", argc);
for (i=0; i<argc; i++) // Kontrolle der übergebenen Parameter
printf(" %s \n", argv[i]);
if (argc > 1)
strcpy(wkspcStr,argv[1]); // static char wkspcStr[180] in ipsimu.h definiert
// und hier mit #include bekannt gemacht
printf("wkspcStr: %s\n",wkspcStr); // Kontrolle
QApplication app(argc, argv);
app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
ipSimuDesign *simWindow = new ipSimuDesign;
simWindow->show();
return app.exec();
}
Code: Alles auswählen
...
// ipsimu.h ist auch hier mit #include bekannt und damit wkspcStr.
// Allerdings ist hier der String wkspcStr leer - warum auch immer.
// deshalb wird hier probeweise wkspcStr direkt gefüllt
strcpy(wkspcStr,"/home/kpdip/IP_Simulation/worksp/testsequ.wkspc");
qDebug() << "Parameter: " << wkspcStr;
if (strlen(wkspcStr) > 0) { // eine Workspace-Datei wurde beim Aufruf uebergeben
wkspFile->setFileName((QString)wkspcStr);
if (wkspFile->open(QIODevice::ReadOnly | QIODevice::Text)) {
int err = readWkspFile(wkspFile, VonAnfang); // Einlesen der Workspacedatei
if (err == 0) {
wkspcChanged=false;
steuerAblauf(1); // dies ist eine slot-function, die von der GUI
// durch Klick auf Button2 aufgerufen wird;
// damit wird die Simulation gestartet
}
}
else printf("Abbruch: Workspace-Datei kann nicht geoeffnet werden!\n");
}
Die Simulation läuft, aber die grafische Oberfläche ist nicht zu sehen. Erst nach Beendigung der Simulation erscheint sie.
Man sollte aber natürlich während der Simulation die Darstellungen auf der grafischen Oberfläche bereits sehen.
Wie geht das?
Tipps sind sehr willkommen