Erreur Inconnue

Erreur Inconnue

by Lea Helene Margot Bliniere -
Number of replies: 6

Bonjour, 

Suite à la création d'un module gui qui compile et fonctionne, nous avons ajouté ce module à notre projet et l'erreur suivante est apparue. 


Attachment Screenshot from 2019-04-03 14-41-03.png
In reply to Lea Helene Margot Bliniere

Erreur Inconnue

by Noureddine Abdel Mélik Gueddach -
Askip tu peux remplacer argc par 1 dans la création de ton app : app->create(1, ...
In reply to Lea Helene Margot Bliniere

Re: Erreur Inconnue

by Vincent Bruno Christophe Tournier -
Hello,
Quand tu appelles create(), tu passes en argument argc et argv, qui contiennent respectivement le nombre d'arguments passés en ligne de commande, et leur valeur.
Selon cette page : https://wiki.gnome.org/HowDoI/GtkApplication, par défaut, create() considère tous les arguments comme des chemins d'accès vers des fichiers. Là, Error est interprété comme un fichier qui ne peut être ouvert, d'où l'erreur.

Quand tu passes 1 à la place de argc, create() pense qu'il n'y a qu'un argument passé, le premier, le nom de ton programme ("./gui" ici), et donc l'ignore, car le premier argument est toujours le nom du programme. C'est pour cela que la suggestion de tes collègues fonctionne normalement.

C'est étrange que cette solution ne marche pas chez toi. Pour tester plus loin, essaye cette version de create : create(argc, argv, "org.gtkmm.example", Gio::APPLICATION_HANDLES_OPEN);

Dis moi ce que tu obtiens après ça

In reply to Vincent Bruno Christophe Tournier

GLib-GIO-CRITICAL **: This application can not open files.

by Ronan Boulic -

Ce message d'erreur a déjà été discuté et résolu correctement avec plusieurs réponses dont celle  de Vincent mais plusieurs étudiants avaient encore le problème vendredi passé.

Je ne fais ici que reformuler ce qui a déjà été écrit dans les réponses précédentes.

1) notre fonction main doit travailler avec argc et argv pour récupérer de l'information pour piloter notre programme.

2) si nous voulons exploiter GTKmm il faut à un moment ou un autre appeler la méthode create qui demande qu'on lui fournisse aussi la valeur des paramètres argc et argv.

3) Or, pour ce projet, nous ne voulons pas que GTKmm commence à interpréter les chaines de caractères qui suivent argv[0] ( argv[0] contient le nom de l'exécutable ; cette chaine est utilisée pour le titre de la fenêtre). En effet la documentation de GTKmm (lien fourni par Vincent) nous dit que :

Normally, GtkApplication will assume that arguments passed on the command line are files to be opened. If no arguments are passed, then it assumes that an application is being launched to show its main window or an empty document. In the case that files were given, you will receive these files (in the form of GFile) from the open signal.

<=> Si on transmet la valeur brute de argc à create et qu'elle est plus grande que 1, GTKmm va chercher à ouvrir un fichier et nous n'avons pas vu comment traiter ce mode de fonctionnement, d'où le message d'erreur.


4) la solution déjà indiquée plusieurs fois est de transmettre la valeur 1 à la méthode create à la place de argc. Cela sert à "tromper" GTKmm pour que cette bibliothêque utilise seulement argv[0] et pas plus.

In reply to Ronan Boulic

Re: GLib-GIO-CRITICAL **: This application can not open files.

by Ludovic Damien Blanc -

Bonjour, 

À la place de "tromper" GTKmm, il suffit aussi juste d'écrire:

"auto app = Gtk::Application::create();"

(donc de ne passer aucun paramètres à "create". Dans notre cas cela suffit.)


Bonne fin de weekend! ;)