2014-09-15 6 views
0

J'essaie actuellement de créer une interface graphique pour un programme de ligne de commande existant en utilisant QT, comme un exercice d'apprentissage.Comment appeler une fonction avec argc & argv?

Le code original a été écrit en c, et j'ai inclus le wrapper c pour le bit C++. J'ai pris l'original

int main(int argc, char **argv) 

et l'ai transformé dans une fonction normale (changé le nom).

J'ai plusieurs cases à cocher qt faites pour agir comme l'entrée, (par exemple -v activé bavard dans le cmdline, alors maintenant j'ai une case à cocher bavard qui fait omble verbose = à « v »)

Il y a aussi plusieurs autres arguments qui prennent des nombres, par exemple -t 4 pour 4 threads.

Les options du programme d'origine sont mises en œuvre comme ceci:

while ((opt = getopt(argc, argv, "vqnrik1eE:P:NTX:F:t:h?f:o:s:")) != -1) { 
    switch (opt) { 
case 'v': 
     verbose = 2; 
     break; 

etc

Comment puis-je appeler toutes ces différentes options comme une fonction standard? Je peux écrire tout l'argument en une seule grande chaîne et l'alimenter si possible, mais comment pourrais-je faire cela?

Merci,

+1

http://meta.stackexchange.com/questions/129598/which-computer-science-programming-stack-exchange-do-i-post-in/129632#129632 –

+0

Que fait le programme de ligne de commande? Est-ce qu'il tourne toujours vite (moins d'un dixième de seconde)? Si cela peut durer plus de quelques secondes, votre approche est incorrecte (vous ne pouvez pas vous permettre de geler l'interface graphique pendant plusieurs secondes) –

Répondre

3

Vous devriez probablement Eloignez-vous des arguments et définir les variables de contrôle directement:

if(verboseCheckBox->checked()){ 
    verbose=2; 
} 
//etc. 
0

Il suffit d'appeler avec un tableau de chaînes comme ceci:

char* argv[4] = {executing_path, "-t 4","v","random_argument"}; 
const int argc = sizeof(argv)/sizeof(char*); 
main(argc, argv); 

Remarque que le premier paramètre est généralement un chemin complet vers l'exécutable que vous recevez dans la fonction principale. Si possible, je garderais le même comportement; parfois, les arguments d'analyse de code le font dans la plage 1... n-1, ignorant ainsi la première valeur dans le tableau.

Maintenant que vous savez comment le faire, je déconseille également. Puisque vous êtes déjà dans le code source, vous devriez probablement utiliser les appels de méthodes directes afin de définir les options comme expliqué dans sa réponse.

Questions connexes