Seite 1 von 1

Qt4: applikation dunkel ausfuehren

Verfasst: 3. September 2007 14:59
von joebar
Hallo,

ich habe eine Anwendung die von Eingabedaten ein Ergebnis berechnet und diese auf die Platte schreibt.

Ich möchte jetzt sowas haben. Starten der Anwendung via

myapplication -b -i /path/to/input/file

Wenn der Parameter b gesetzt ist soll das Input File automatisch gelesen werden, die Berechnung durchgeführt werden und nachdem das Resultat auf der Platte ist soll sich die Anwendung selber beenden. Meine Idee war im Konstruktor zu prüfen ob b gesetzt ist und dann die Berechnungen zu machen und die Anwendung zu beenden. Ich bekomme die Anwendung aber nicht beendet. Das close() reagiert einfach nicht, wohl weil mein Konstruktor noch nicht fertig ist. Wie könnte ich das am besten machen?

Danke,
J.

Verfasst: 3. September 2007 15:03
von CaptnChaos
ich denke qt und c++ ist für sowas suboptimal.
schau dir für sowas lieber eine skriptsprache wie python an.
das geht schneller und einfacher und ist nicht so riesig, wie es eine qt anwendung werden würde.

Verfasst: 3. September 2007 15:14
von RHBaum
das geht schneller und einfacher und ist nicht so riesig
Naja, ob nen interpretiertes script langsamer als nen compiliertes ist, darueber laesst sich streiten, genau so was denn groesser ist, die Qtlibs, oder die core python engine z.b.

@joebar
was spricht dagegen zwei programme zu machen, eines mit und eines ohne GUI, dafuer aber kommandozeilen orientiert.
Fuer den anwender, der beim aufruf natuerlich genau weiss was er will, machts kaum unterschied, ob er fuer die GUI app MyApp, udn fuer die commandozeilenversieon MyAppc oder sowas schreibt.

Bei ner reinen commandozeilenversion hasst den vorteil, das dich ums schliessen der GUI gar ned mehr kuemmern musst. Und Code nicht doppelt zu entwickeln trotz unterschiedlicher uebersetzungseinheiten, dafuer gibt es libs (dynamisch oder statisch)
Mit der QT kann man auch konsolenprogs schreiben.

Ciao ...

Verfasst: 3. September 2007 15:19
von CaptnChaos
Naja, ob nen interpretiertes script langsamer als nen compiliertes ist, darueber laesst sich streiten, genau so was denn groesser ist, die Qtlibs, oder die core python engine z.b.
ich meinte nich später beim ausfühern, sondern beim erstellen des Programms. Und die QtLibs braucht man für ein kommandozeilenscript nicht...

Wenn dus unbedingt in c++ machen willst, würde ich vorschlagen, das du in der main funktion die Parameter parst und auf bools, int und QString bzw std::string verteilst und deiner Hauptanwendung (die nicht mehr als ein QObject sein muss) übergibst.
Wird kein Parameter übergeben, startest du eine GUI, die sich dann die Werte zusammenklicken lässt und selbst eins von deinen Rechen-QObjects aufruft.

Verfasst: 3. September 2007 16:19
von RHBaum
ich meinte nich später beim ausfühern, sondern beim erstellen des Programms. Und die QtLibs braucht man für ein kommandozeilenscript nicht...
Ob fuer ihn Scripts geeigneter sind oder nen eigenes binary, da gibts zu viele Faktoren, die da reinspielen, was wir nicht fuer ihn entscheiden koennen.
- Vielleicht ist Laufzeit ja nen problem, weisst du was er mit dem prog genau macht ?
- Nen Interpreter installiert vorraussetzen (Perl, Java Python etc) scheitert oftmals an den Installationsbedingungen. Wenn das prog zigtausend mal installiert werden soll, wuerd ich die fremdabhaengigkeiten so gering wie moeglich halten.
....
Sicher, ne ueberlegung isses immer wert, wowas mal kurz mit scripts abzuhandeln, aber das wird er sicher scho gemacht haben.

Was ebenfalls gegen die Scriptentwicklung spricht, ist das er auch ne GUI version hat / haben moechte. In beiden muesste er dann die selbe logic implementieren, bei script und C++ GUI dann wahrscheinlich 2 mal, was durchaus den vorteil des scriptes des weniger entwicklungsaufwandes, wieder negieren koennte ....

BTW fuer linux kompatible commandozeilen-synthax sollt es fertige parser auch geben.... vielleicht sollt er die sich anschauen ob die ne vereinfachung sind ....

Ciao ...

Re: Qt4: applikation dunkel ausfuehren

Verfasst: 3. September 2007 16:53
von khrl01
joebar hat geschrieben:Hallo,

ich habe eine Anwendung die von Eingabedaten ein Ergebnis berechnet und diese auf die Platte schreibt.

Ich möchte jetzt sowas haben. Starten der Anwendung via

myapplication -b -i /path/to/input/file

Wenn der Parameter b gesetzt ist soll das Input File automatisch gelesen werden, die Berechnung durchgeführt werden und nachdem das Resultat auf der Platte ist soll sich die Anwendung selber beenden. Meine Idee war im Konstruktor zu prüfen ob b gesetzt ist und dann die Berechnungen zu machen und die Anwendung zu beenden. Ich bekomme die Anwendung aber nicht beendet. Das close() reagiert einfach nicht, wohl weil mein Konstruktor noch nicht fertig ist. Wie könnte ich das am besten machen?

Danke,
J.
Ich glaube Du denkst einfach zu kompliziert. Mach doch eine ganz normale GUI-Applikation.
Dort gibt es eine Funktion main(int argc, char** argv);
Direkt nach dem main-start schreibst Du deine Prüfung auf Parameter.
Falls der Parameter gesetzt ist, erledigt Dein Programm die Lese- und Schreibarbeiten.
Falls er nicht gesetzt ist starte das GUI...

ungefähr so:

Code: Alles auswählen

int main(int argc,char**argv)
{
   if (argv[1] == '-b') {
      startReadWrite()....
      exit(0);
   }
   QApplication a(argc,argv);
   MyGUIClass c;
   c.show();
   return a.exec();
}
grüsse
karl-heinz