Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453

    [c++] interfaccie grafiche gtkmm + glade su windows

    Ciao a tutti...

    Volevo smanettare un po' con le librerie grafiche per vedere che riesco a cavarne fuori.. Ho iniziato facendo delle semplici prove (a mano) usando un template di progetto per DevC++ che mi è stato passato (in pratica include da solo le directory e linka le librerie)...Fin qui comunque funziona tutto bene..

    Una volta concluso che fare a mano interfaccie molto complesse è uno spreco di tempo, ho pensato di passare all'accoppiata gtkmm + glade, tool per disegnare le interfaccie in maniera grafica, che genera un file xml .glade caricato a tempo d'esecuzione.

    Ho seguito la documentazione, che però è relativa a linux, così per linking ecc mi sono affidato al solito template di progetto... Ho disegnato una finestra con un bottone su glade, salvato il .glade, e fatto il seguente programma che semplicemente carica il file glade.
    Ottengo però un errore a tempo d'esecuzione (si chiude come se avesse un segmentation fault)..

    codice:
    #include <cstdlib>
    #include <iostream>
    #include <libglademm.h>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        Glib::RefPtr<Gnome::Glade::Xml> refXml = Gnome::Glade::Xml::create("basic1.glade");
       
        return 0;
    }
    c'è qualcuno che usa/ha usato con successo questa accoppiata sotto windows che puo' spiegarmi dove sbaglio? Con quel programma vorrei solo importare il .glade e visualizzare la finestra che ho disegnato con glade, poi per tutto il resto vedo io..

    Vi ringrazio..

  2. #2
    Prova con:
    codice:
    int main (int argc, char **argv)
    {
      Gtk::Main kit(argc, argv);
      Glib::RefPtr<Gnome::Glade::Xml> refXml;
    
    #ifdef GLIBMM_EXCEPTIONS_ENABLED
    
      try {
    
        refXml = Gnome::Glade::Xml::create("simple.glade");
    
      }
      catch(const Gnome::Glade::XmlError& ex) {
    
        std::cerr << ex.what() << std::endl;
        return 1;
    
      }
    
    #else
    
      std::auto_ptr<Gnome::Glade::XmlError> error;
      refXml = Gnome::Glade::Xml::create("simple.glade", "", "", error);
    
      if(error.get()) {
        std::cerr << error->what() << std::endl;
        return 1;
      }
    
    #endif
    
      return 0;
    
    }

  3. #3
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    Grazie della risposta!

    Purtroppo ottengo questo errore col tuo main (semplicemente sostituito il mio col tuo, lasciando il resto uguale

    codice:
     variable `Gtk::Main kit' has initializer but incomplete type
    :master:

  4. #4
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    allora, aggiungendo l'inclusione del file gtkmm/main.h, non da errori, compila correttamente, ma non succede niente in esecuzione... anche se nel file glade ho impostato "Visible: yes" sulla finestra.. il codice è questo.. (comunque ti sarei grato se potessi spiegarmelo! come mai non basta come ho fatto io?)

    codice:
    #include <cstdlib>
    #include <iostream>
    #include <libglademm.h>
    #include <gtkmm/main.h>
    //using namespace std;
    
    int main (int argc, char **argv)
    {
      Gtk::Main kit(argc, argv);
      Glib::RefPtr<Gnome::Glade::Xml> refXml;
    
    #ifdef GLIBMM_EXCEPTIONS_ENABLED
    
      try {
    
        refXml = Gnome::Glade::Xml::create("progetto1.glade");
    
      }
      catch(const Gnome::Glade::XmlError& ex) {
    
        std::cerr << ex.what() << std::endl;
        return 1;
    
      }
    
    #else
    
      std::auto_ptr<Gnome::Glade::XmlError> error;
      refXml = Gnome::Glade::Xml::create("progetto1.glade", "", "", error);
    
      if(error.get()) {
        std::cerr << error->what() << std::endl;
        return 1;
      }
    
    #endif
    
      return 0;
    
    }

  5. #5
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    bah ho fatto un sacco di prove ma ottengo uno sfracelo di errori in ogni caso.. ho provato a compilare pari pari un esempio trovato sul web, ma ottengo una paginata di errori...

    vorrei ripartire da zero, reinstallare l'ambiente su windows, e capire passo passo come fare a far funzionare questa maledetta importazione del file glade.. chi mi aiuta a fare un po' di chiarezza?

    vi ringrazio..

  6. #6
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    Ho provato un altro codice che ho trovato in un esempio online, questo:

    codice:
    #include <libglademm/xml.h>
    #include <gtkmm.h>
     
    int main(int argc, char* argv[])
    {
        Gtk::Main kit(argc, argv);
        Glib::RefPtr<Gnome::Glade::Xml> refXml = Gnome::Glade::Xml::create("progetto1.glade");
        kit.run();
        return 0;
    }
    Anche così compila, ma ora da un errore di runtime:

    Microsoft Visual C++ Runtime Library
    program ....project.exe
    This application has requested the runtime to terminate it in an unusual way. Please contact...blabla.
    E' un passo avanti o un passo indietro?

    EDIT1: anche questo esempio, copiato pari pari in un progetto e compilato, non da errori ma non mostra niente... come mai...........
    http://www.gtkmm.org/docs/gtkmm-2.4/...g-widgets.html

    EDIT2: se nel codice che ho linkato faccio eseguire sempre il corpo del try (lo tolgo dal blocco try e commento il catch) ottengo runtime error... Mi viene il dubbio che quando non si vede niente a tempo di compilazione è perchè c'è un errore, esce dal try e il catch scriverebbe sulla console (cerr)... ma questo template di progetto ha scritto nella descrizione "A GTK-- application (without console)"... puo' essere? In tal caso:
    1- che cavolo d'errore puo' essere che me lo da su qualsiasi .glade che gli passo, anche quello preso dalla documentazione ufficiale? E' il mio ambiente?
    2- come posso risolvere?

    EDIT3: bingo: ho cambiato il tipo di progetto da win32 GUI a win32 console, per vedere hce stampava sulla console... e infatti da questo errore:

    (simple.exe:4008): libglade-WARNING **: could not find glade file 'simple.glade'. Failed to load glade file 'simple.glade'
    Il file però è nella stessa cartella! Dove lo cerca?? o_O

    EDIT4: CI SIAMO QUASI: ho dato un'occhiata al reference della funzione create(),ed ho osservato questo:
    codice:
    static Glib::RefPtr<Xml> Gnome::Glade::Xml::create  	(  	const std::string&   	 filename,
    		const Glib::ustring&  	root = Glib::ustring(),
    		const Glib::ustring&  	domain = Glib::ustring()
    	)  	[static]
    quel 'root' mi ha messo la pulce nell'orecchio, così ho provato a passargli l'indirizzo completo del file glade e... FUNZIONA! Resta da capire che valore vuole come root per fargli capire che è nella stessa cartella!

    PS: mi scuso per questo post sconclusionato, è che ci sto lavorando di continuo e lo aggiorno per non far scervellare chi si mette a leggere su domande a cui mi sono già risposto... cancellare i passaggi mi sembra peggio... spero di non essere bacchettato dai mod

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.