Qt-Programm von Kommandozeile aus starten

Alles rund um die Programmierung mit Qt
Antworten
qtNiko
Beiträge: 216
Registriert: 6. April 2007 21:26
Wohnort: München

Qt-Programm von Kommandozeile aus starten

Beitrag von qtNiko »

hi,

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();
}
Im Constructor in ip_simu.cpp ganz am Ende:

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");
	}
Das funktioniert soweit (bis auf das Problemchen, dass wkspcStr hier plötzlich leer ist).
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 :?
Gruß von qtNiko

Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Re: Qt-Programm von Kommandozeile aus starten

Beitrag von archer »

Verwende doch QCoreApplication::arguments() im Konstruktor von ip_simu.cpp
um die Parameter auszuwerten, da hast du gleich eine QStringList mit QStrings.
In der main mußt du dann gar keine Auswertung und kein Umkopieren machen.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: Qt-Programm von Kommandozeile aus starten

Beitrag von solarix »

1. Verwende nie globale Variablen

2. Verwende in einer Qt-Umgebung auch QString..

3. Du kannst jederzeit und überall im Programm die Argumente (QCoreApplication sei Dank) ermitteln (http://doc.qt.nokia.com/latest/qcoreapp ... -arguments)

4. Wenn du das Widget nicht siehst ist "steuerAblauf(1)" blockierend (ohne Screen-Update). Das würde aber auch bedeutet, dass auch auch im normalen Betrieb (Dateiauswahl via GUI) die GUI während der Simulation "gefriert"..

hth!
qtNiko
Beiträge: 216
Registriert: 6. April 2007 21:26
Wohnort: München

Re: Qt-Programm von Kommandozeile aus starten

Beitrag von qtNiko »

Danke für die Tipps.

steuerAblauf verwende ich in der GUI und kann die ganze Simulation life mitansehen.
Gruß von qtNiko

Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Antworten