Barra laterale

programmazione:libglade:caricare_file_glade_correttamente

Caricare interfaccia glade non dalla directory corrente

Autore: Fabio Di Matteo
Ultima revisione: 24/12/2009

Scenario: (facendo riferimento all'articolo Sviluppare con Libglade) spesso capita di dovere distribuire una directory contenente eseguibile e file glade per l'interfaccia grafica. Il nostro eseguibile quindi deve poter trovare il file contenente l'interfaccia grafica da qualunque percorso esso sia lanciato.

Quando si deve caricare un file generato da glade si usa spesso del codice di questo tipo:

        ...
 
      	/* Carica l'interfaccia dal file di glade */
      	xml = glade_xml_new ("interfaccia.glade", NULL, NULL); 	       
 
        ...

Se lanciamo a questo punto il nostro eseguibile dalla directory dello stesso, nessun problema l'eseguibile si avvia correttamente, ma se lanciamo l'eseguibile da un'altra directory otterremmo un messaggio del genere:

libglade-WARNING **: could not find glade file 'interfaccia.glade'

che ci avverte del fatto che libglade non e' in grado di trovare il nostro file interfaccia.glade .

Ovviare al problema

Se utilizziamo le seguenti istruzioni invece il file viene sempre trovato in maniera corretta purche' resti nella stessa directory dell'eseguibile

         ...
        /*Carica l'interfaccia  dal file glade*/
 
        /*Ricava il percorso dell'eseguibile, senza il nome del file*/ 
	gchar* base = g_path_get_dirname(argv[0]);
 
        /*Concatena il percorso base al nome file "interfaccia.glade"*/
	gchar* glade_file = g_build_filename (base, "interfaccia.glade", NULL);
 
        /*Infine carica come disolito il file dell'interfaccia */
	xml = glade_xml_new(glade_file, NULL, NULL);
        ...

Quando l'eseguibile potrebbe essere nel path di sistema

        ...
        gchar* base;
        gchar* glade_file;
 
        //se il programma NON e' in path
        if (g_find_program_in_path ("eseguibile.bin")==NULL){
                /*Ricava il percorso dell'eseguibile, senza il nome del file */
                base = g_path_get_dirname(argv[0]);
 
                /*Concatena il percorso base al nome file gui.glade */
                glade_file = g_build_filename (base,"../share/progetto", "gui.glade", NULL);
        }else{
                base = g_path_get_dirname(g_find_program_in_path ("eseguibile.bin"));
                glade_file = g_build_filename (base,"../share/progetto", "gui.glade", NULL);
        }
        ...

programmazione/libglade/caricare_file_glade_correttamente.txt · Ultima modifica: 18/04/2018 - 15:48 (modifica esterna)