[gelöst]Parameter einer Qt Anwendung übergeben

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
redbulls
Beiträge: 59
Registriert: 27. März 2011 15:20

[gelöst]Parameter einer Qt Anwendung übergeben

Beitrag von redbulls »

Hi !
Ich möchte ein Konsolenprogramm von der Konsole aus starten und einen Parameter mitgeben(Pfad einer Datei). Den Parameter muss ich jetz in der main einfach vorsehen oder und dann müsste das ohne Probleme funktionieren. Oder gibts da sonst noch was zu wissen?

Code: Alles auswählen

int main(int argc, char *argv[], QString pfad)
Zuletzt geändert von redbulls am 26. April 2011 13:25, insgesamt 1-mal geändert.
sehr interessiert an Qt
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Hast du dich schonmal gefragt, wofür main() Parameter hat? Richtig, da stehen die cmd-line-args drinnen :P
argc ist die Größe (Anzahl der Parameter), argv enthält diese, wobei argv[0] == Programmname.

Die Signatur von main zu ändern geht nicht. Der C++-Standard erlaubt 2 Formen:
* int main()
* int main( int argc, char** argv )
redbulls
Beiträge: 59
Registriert: 27. März 2011 15:20

Beitrag von redbulls »

Danke für die schnelle Antwort!
Is klar. Wie kann ich jetzt also einen QString mitgeben. Wo leg ich das fest?
sehr interessiert an Qt
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Wie wäre es mit einem kleinen Test, zum Rumspielen?

Code: Alles auswählen

#include <iostream>

int main(int argc, char** argv) {
    using namespace std;
    for( int i=0; i<argc; ++i ) {
        cout << i << ": " << argv[i] << "\n";
    }
}
Und jetzt einfach mit verschiedenen cmd-line-args versuchen?

Code: Alles auswählen

$ ./test_1 "hallo welt" -more options
0: ./test_1
1: hallo welt
2: -more
3: options
// edit:
Mir ist nicht klar was du mit "QString mitgeben" meinst. Du kannst die Parameter von main() nicht ändern, du musst über argv gehen, das Array parsen und entsprechend deinen path extrahieren.
redbulls
Beiträge: 59
Registriert: 27. März 2011 15:20

Beitrag von redbulls »

Danke!! Das Beispiel hat mir sehr geholfen.
sehr interessiert an Qt
SamFredericks
Beiträge: 14
Registriert: 19. April 2011 12:44

Beitrag von SamFredericks »

Ist vllcht was spät, aber was mir noch einfällt ist die Funktion

Code: Alles auswählen

QApplication::instance()->arguments()
Hier bekommst du gleich eine QStringList mit all deinen übergebenen Parametern und könntest dir sozusagen die for-Schleife sparen.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

SamFredericks hat geschrieben:Hier bekommst du gleich eine QStringList mit all deinen übergebenen Parametern und könntest dir sozusagen die for-Schleife sparen.
Theoretisch ja. Praktisch sagt die Doku:
Calling this function is slow - you should store the result in a variable when parsing the command line.
Wenn der Zugriff in der main erfolgt (was wahrscheinlich ist), bietet sich der direkte argv-Zugriff an (ist ja nicht wirklich schwer).

Wenn die Cmdline-args mal überhand nehmen, würde ich sowieso gleich ein ordnetliches Framework einsetzen, z.B. boost.program_options.
Antworten