Newsgroup: it.comp.lang.c++
Titolo: GUI con C++

Salve a tutti,
Premetto che fino a ora ho sempre programmato in VB, VB.Net e C# e quindi 
con la GUI facilmente integrabile.
Mentre gli unici progetti con il C++ li ho fatti da linea di comando e con 
le SDL.
Quindi... il domandone:
Solo per prova, vorrei fare un programmino semplice semplice, un tris, 
composto semplicemente da:
9 label, intercettano l' evento click e cosě uno sceglie dove mettere la X o 
il O.
Che librerie esistono (magari con editor visuale) per creare GUI con il C++?
Ovviamente intendo librerie freeware e magari open-source in modo da 
includerle direttamente nell' applicazione in modo che l' utente non deve 
installarsi prima la libreria per far partire il programma.
Bye,
-- 
Carmine ( 
pikachu...@gmail.com
 (Togli la scritta NOSPAM) )
NUOVISSIMO SITO!!! The Total Site 4 : 
http://www.thetotalsite.it
MariokartDS Codice Amico: 532639027909 - CarmineC in MarioKartDS 

 Bye,
Io uso le GTK+, in particolare "gtkmm" (versione C++ delle gtk), e Glade
come editor visuale di GUI. Se vuoi puoi usare il file XML generato da
quest'ultimo tramite le librerie "libglademm" per avere tutti i
riferimenti che ti servono.
ciao

Io ho provato le wxWidget, belle ma con il problema di essere veramente 
grosse . Più compatte ma molto meno belle ho trovato le fltk. Queste 
ultime si imparano in mezza giornata o poco + ed hanno un ambiente rad 
(fluid) per creare le interfacce .... ma personalmente non lo ho amato 
fin dall'inizio. Per le vxWidget ho trovato carino Visualwx e 
l'estensione per devc++. Sotto che piattaforma svilupperai ?
ciao
PP


 piattaforma svilupperai ?
Sviluppo su windows,
Ma vorrei che le mie applicazioni funzionassero anche sotto linux.


 tutti i riferimenti che ti servono.
Mmm scusa se la domanda ti può sembrare banale, ma sono abituato(purtroppo) 
a visual basic dove basta che fai doppio clic su un controllo e ti esce 
tutta la lista degli eventi.
Mentre in c++, usando le GTK+, come intercetto gli eventi (clic ecc...) e 
come cambio le proprietà in run-time?


 Bye,
Con "Glade" puoi creare le interfacce in modo visuale, gestire gli eventi
ecc. ecc. Ti consiglio di leggere qualche tutorial per imparare a disporre
gli elementi come preferisci, in ogni caso e' estremamente potente.
Questo programma ti permette di generare anche il codice sorgente in C o
C++ (in verita' anche altri linguaggi, ma non ci interessano qui), ma io
non ti consiglio di sfruttare questa opzione.
Invece puoi semplicemente salvare il progetto (verra' creato un file XML)
e richiamarlo all'interno del codice tramite le librerie "libglademm"
(molto semplici).
se hai bisogno di un esempio fammi sapere
ciao

 se hai bisogno di un esempio fammi sapere
Mi saresti di grande aiuto.
Ad esempio una cosa semplice semplice in C++ che:
form con 2 pulsanti.
il primo pulsante cambia la caption della form
il secondo cambia la caption dell' altro pulsante.
in modo da vedere come gestire le proprietą (ad esempio text ecc...)


 Bye,
segue il prog come lo hai chiesto
se vuoi compilarlo (o cmq ti serve una base per iniziare a compilare i
tuoi prog) copia anche gli ultimi file che ho inserito facendo attenzione
a ricostruire la gerarchia di directory cosi' come indicata.
poi lancia
./automake.sh
./configure
make
./src/esempio
ciao
/////////////////////////////////////////////////esempio/src/main.cc
#include <stdlib.h>
#include "GUI.h"
int
main(int argc, char** argv)
{
	// crea un'istanza della GUI (pensa a tutto lei)
	gui::GUI app(argc,argv);
	return EXIT_SUCCESS;
}
/////////////////////////////////////////////////esempio/src/GUI.h
#ifndef GUI_H
#define GUI_H
#include <libglademm.h>
#include <gtkmm.h>
namespace gui {
class GUI {
	private:
		// puntatore a file xml generato da glade
		Glib::RefPtr< Gnome::Glade::Xml > glade_xml;
		// funzioni per la gestione degli eventi
		// solo click sui pulsanti, la chiusura
		// della finestra e' gestita dalle gtk
		void on_button1_clicked();
		void on_button2_clicked();
		// puntatori agli elementi della finestra
		Gtk::Window* window;
		Gtk::Button* button1;
		Gtk::Button* button2;
	public:
		// costruttore
		GUI(int argc, char** argv);
};
} //end namespace gui
#endif
/////////////////////////////////////////////////esempio/src/GUI.cc
#include "GUI.h"
namespace gui {
GUI::GUI(int argc, char** argv)
{
	// inizializza le librerie gtk
	g_type_init();
	// applicazione
	Gtk::Main app(&argc,&argv);
	// prendo un riferimento al file xml creato da glade
	glade_xml = Gnome::Glade::Xml::create("glade/finestra.glade","","");
	// il riferimento creato precedentemente mi permette
	// di utilizzare la funzione get_widget()
	// per ottenere un riferimento ai vari oggetti presenti
	// riferimento alla finestra principale
	// "window1" e' il nome impostato con glade
	window = (Gtk::Window*)glade_xml->get_widget("window1");
	// riferimento al primo pulsante
	button1 = (Gtk::Button*)glade_xml->get_widget("button1");
	// collego il pulsante alla funzione per la gestione dell'evento.
	// la funzione in questo caso e' on_button1_clicked()
	// questo puo' sembrare complicato, in realta' fatto una volta
	// poi e' sempre la stessa storia. (per approfondimenti
	// leggi la documentazione delle librerie libsigc++)
	button1->signal_clicked().connect(sigc::mem_fun(*this, &GUI::on_button1_clicked));
 
	// come sopra
	button2 = (Gtk::Button*)glade_xml->get_widget("button2");
	button2->signal_clicked().connect(sigc::mem_fun(*this, &GUI::on_button2_clicked));
	// faccio partire l'applicazione
	app.run(*window);
}
void
GUI::on_button1_clicked()
{
	// possiedo gia' il riferimento alla finestra
	// principale
	window->set_title("Nuovo nome alla finestra!");
}
void
GUI::on_button2_clicked()
{
	// possiedo gia' il riferimento all'altro
	// pulsante
	button1->set_label("ciao mondo!");
}
} //end namespace gui
////////////////////////////////////////////////////////////
// i seguenti file possono esserti utili per la compilazione
////////////////////////////////////////////////////////////
/////////////////////////////////////////////////esempio/src/Makefile.am
bin_PROGRAMS = esempio
esempio_SOURCES =  main.cc GUI.cc
AM_CXXFLAGS = -Wall
INCLUDES =\
	$(GTKMM_CFLAGS)\
	$(GLADEXML_CFLAGS)
esempio_LDADD =\
	$(GTKMM_LIBS)\
	$(GLADEXML_LIBS)
/////////////////////////////////////////////////esempio/automake.sh
#!/bin/bash
exec `aclocal`;
exec `autoconf`;
exec `touch README ChangeLog AUTHORS NEWS`;
exec `automake -a`;
/////////////////////////////////////////////////esempio/
configure.in
dnl Process this file with autoconf to produce a configure script.
AC_INIT(src/main.cc)
AM_INIT_AUTOMAKE(esempio,1.0)
dnl Checks for programs.
AC_PROG_AWK
AC_PROG_CC
AC_PROG_CXX
AC_PROG_INSTALL
AC_PROG_LN_S
PKG_CHECK_MODULES(GTKMM, gtkmm-2.4,,exit)
PKG_CHECK_MODULES(GLADEXML, libglademm-2.4,,exit)
AC_SUBST(GTKMM_LIBS)
AC_SUBST(GLADEXML_LIBS)
AC_SUBST(GTKMM_CFLAGS)
AC_SUBST(GLADEXML_CFLAGS)
dnl Checks for libraries.
dnl Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h])
dnl Checks for typedefs, structures, and compiler characteristics.
dnl Checks for library functions.
AC_OUTPUT(src/Makefile Makefile)
/////////////////////////////////////////////////esempio/Makefile.am
SUBDIRS = . src

Mmm grazie !
Me li comincio a studiare allora ;)
In effetti sembra complicato, (sicuramente più di VB)...
Quindi le proprietà si cambiano mediante l' uso di metodi giusto? (set_label 
ecc...)
C'è per caso una documentazione italiana ai vari metodi dei controlli 
principali?


 principali?
ma certo, basta googlare "gtkmm"
ti consiglio di dare un'occhiata anche alla documentazione di "libglade",
di leggere un tutorial su glade etc etc. tutte cose che trovi con google.
sulla debian ho anche trovato dei pacchetti con queste documentazioni.
hanno a che fare con "Devhelp"
ciao e studia

 trovi con google.
Ok.


io ti consiglio le wxwidget ... :)


 io ti consiglio le wxwidget ... :)
Mah... vedrò di provare anche quelle ;)
