IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

Application GTK simple


Sujet :

GTK+ avec C & C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Application GTK simple
    Bonjour

    Pour des raisons bassement technique j'ai fait le choix de migrer sur LINUX. Avant je codait du JAVA en pro et FREEBASIC pour le plaisir. En migrant sur LINUX plus de WINAPI, et donc DIRECTION GTK. En ce moment je me suis mis en tete de realiser une appli simple avec une barre d'outils (4), ou chaque outil permet de basculer entre 4 groupes de composants.

    je cherche donc un tuto qui explique comment creer dans une fenetre la chose.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 147
    Points : 88
    Points
    88
    Par défaut
    hello

    je ne pense pas que tu trouveras directement un tuto qui te mache le travail.

    Cela étant je te suggère de te baser sur une trame telle que la suivante :

    1 utiliser une base d'appli genre gtkapplication. tu as dans gtk3-demo d'excellent exemple c'est fourni avec gtk+

    2 ensuite il te faut choisir un mode d'affichage des outils

    premiere option des icones
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
      /* Creation du bouton "Nouveau" */
      {
        GtkWidget *button = NULL;
     
        button = gtk_button_new_from_icon_name("document-new",GTK_ICON_SIZE_BUTTON);
        gtk_widget_set_tooltip_text (GTK_WIDGET (button), "Nouveau document");
        g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_new), text_view);
        gtk_box_pack_start (GTK_BOX (button_box), button, expand, fill, padding);
        //gtk_box_pack_start (GTK_BOX (button_box), button, FALSE, FALSE, 0);
      }
     
      /* Creation du bouton "Ouvrir" */
      {
        GtkWidget *button = NULL;
     
        button = gtk_button_new_from_icon_name("document-open",GTK_ICON_SIZE_BUTTON);
        gtk_widget_set_tooltip_text (GTK_WIDGET (button), "Ouvrir un document");
        g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_open), text_view);
        gtk_box_pack_start (GTK_BOX (button_box), button, expand, fill, padding);
      }
     
      /* Creation du bouton "Sauvegarder" */
      {
        GtkWidget *button = NULL;
     
        button = gtk_button_new_from_icon_name("document-save",GTK_ICON_SIZE_BUTTON);
        gtk_widget_set_tooltip_text (GTK_WIDGET (button), "Enregistrer un document");
        g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_save), NULL);
        gtk_box_pack_start (GTK_BOX (button_box), button, expand, fill, padding);
      }
     
      /* Creation du bouton "Sauvegarder sous" */
      {
        GtkWidget *button = NULL;
     
        button = gtk_button_new_from_icon_name("document-save-as",GTK_ICON_SIZE_BUTTON);
        gtk_widget_set_tooltip_text (GTK_WIDGET (button), "Enregistrer un document sous...");
        g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_saveas), NULL);
        gtk_box_pack_start (GTK_BOX (button_box), button, expand, fill, padding);
      }
     
      /* Creation du bouton "Fermer" */
      {
        GtkWidget *button = NULL;
        button = gtk_button_new_from_icon_name("process-stop",GTK_ICON_SIZE_BUTTON);
        gtk_widget_set_tooltip_text (GTK_WIDGET (button), "Fermer le document");
        g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_close), NULL);
        gtk_box_pack_start (GTK_BOX (button_box), button, expand, fill, padding);
      }
     
      /* Creation du bouton "Quitter" */
      {
        GtkWidget *button = NULL;
     
        button = gtk_button_new_from_icon_name("application-exit",GTK_ICON_SIZE_BUTTON);
        gtk_widget_set_tooltip_text (GTK_WIDGET (button), "Quitter l'éditeur");
        g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_quit), NULL);
        gtk_box_pack_end (GTK_BOX (button_box), button, expand, fill, padding);
      }
    autre piste avec un menu toolbar
    ton menu toolbar est alimenté par 4 boutons qui auront chacun leur callback
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    GtkWidget * create_toolbar (GtkWidget *sourceview)
    {
    	GtkWidget *toolbar;
    	GtkToolItem *item;
    	GtkToolItem *Separator;
     
    	toolbar = gtk_toolbar_new ();
    	gtk_widget_set_valign (toolbar, GTK_ALIGN_CENTER);
     
    	/* production d'un lot de bouton */
    	item = gtk_tool_button_new (NULL, NULL);
    	gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "go-next");
    	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
    	g_signal_connect(item, "clicked",    G_CALLBACK	(cb_ButtonClicked_toNext),NULL);
     
    	item = gtk_tool_button_new (NULL, NULL);
    	gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "go-previous");
    	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
    	g_signal_connect(item, "clicked",    G_CALLBACK	(cb_ButtonClicked_toPrevious),NULL);
     
    	/* production d'un lot de bouton pour mon affaire*/
    	item = gtk_tool_button_new (NULL,NULL );
    	gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (item), "document-new");
    	gtk_tool_item_set_tooltip_markup (GTK_TOOL_ITEM (item), "Nouveau document");
    	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
    	g_signal_connect(item, "clicked",    G_CALLBACK	(cb_ButtonClicked_toNew),NULL);
     
    	item = gtk_tool_button_new (NULL,NULL);
    	gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (item),"document-open");
    	gtk_tool_item_set_tooltip_markup(GTK_TOOL_ITEM (item), "<b>Ouvrir</b> un fichier texte existant");  
    	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
    	g_signal_connect(item, "clicked",    G_CALLBACK	(cb_ButtonClicked_toOpen),NULL);
     
    	item = gtk_tool_button_new (NULL,NULL);
    	gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (item),"document-open-recent");
    	gtk_tool_item_set_tooltip_markup(GTK_TOOL_ITEM (item), "<b>Ouvrir</b> un fichier traité récemment");  
    	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
    	g_signal_connect(item, "clicked",    G_CALLBACK	(cb_ButtonClicked_toRecent),NULL);
     
    	item = gtk_tool_button_new (NULL,NULL );
    	gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (item), "document-save");
    	gtk_tool_item_set_tooltip_markup (GTK_TOOL_ITEM (item), "<b>Enregistrez</b> le fichier courant");  
    	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
    	g_signal_connect(item, "clicked",    G_CALLBACK	(cb_ButtonClicked_toSave),NULL);
     
    	item = gtk_tool_button_new (NULL,NULL );
    	gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (item), "document-save-as");
    	gtk_tool_item_set_tooltip_markup (GTK_TOOL_ITEM (item), "<b>Enregistrez</b> sous ....");  
    	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
    	g_signal_connect(item, "clicked",    G_CALLBACK	(cb_ButtonClicked_toSaveAs),NULL);
     
    	/* Avec des séparateurs */
    	Separator = gtk_separator_tool_item_new();
    	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), Separator, -1);
    	/* fin separator */
    3 dans chaque callback tu définis les 4 contextes


    modele de callback pour bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void cb_open (GtkWidget *widget, gpointer user_data)
    {
     
     ......
      /* Parametre inutilise */
      (void)widget;
      (void)user_data;
    }
    modele de callback pour toolbar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    gint cb_ButtonClicked_toSaveAs( GtkWidget *widget,GdkEvent  *event,  gpointer   data )
    {
     .......
      return(FALSE);
      (void)widget;
      (void)event;
      (void)data;
    }

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par turboiii Voir le message
    hello

    je ne pense pas que tu trouveras directement un tuto qui te mache le travail.

    Cela étant je te suggère de te baser sur une trame telle que la suivante :

    1 utiliser une base d'appli genre gtkapplication. tu as dans gtk3-demo d'excellent exemple c'est fourni avec gtk+

    2 ensuite il te faut choisir un mode d'affichage des outils

    premiere option des icones
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
      /* Creation du bouton "Nouveau" */
      {
        GtkWidget *button = NULL;
     
        button = gtk_button_new_from_icon_name("document-new",GTK_ICON_SIZE_BUTTON);
        gtk_widget_set_tooltip_text (GTK_WIDGET (button), "Nouveau document");
        g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_new), text_view);
        gtk_box_pack_start (GTK_BOX (button_box), button, expand, fill, padding);
        //gtk_box_pack_start (GTK_BOX (button_box), button, FALSE, FALSE, 0);
      }
     
      /* Creation du bouton "Ouvrir" */
      {
        GtkWidget *button = NULL;
     
        button = gtk_button_new_from_icon_name("document-open",GTK_ICON_SIZE_BUTTON);
        gtk_widget_set_tooltip_text (GTK_WIDGET (button), "Ouvrir un document");
        g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_open), text_view);
        gtk_box_pack_start (GTK_BOX (button_box), button, expand, fill, padding);
      }
     
      /* Creation du bouton "Sauvegarder" */
      {
        GtkWidget *button = NULL;
     
        button = gtk_button_new_from_icon_name("document-save",GTK_ICON_SIZE_BUTTON);
        gtk_widget_set_tooltip_text (GTK_WIDGET (button), "Enregistrer un document");
        g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_save), NULL);
        gtk_box_pack_start (GTK_BOX (button_box), button, expand, fill, padding);
      }
     
      /* Creation du bouton "Sauvegarder sous" */
      {
        GtkWidget *button = NULL;
     
        button = gtk_button_new_from_icon_name("document-save-as",GTK_ICON_SIZE_BUTTON);
        gtk_widget_set_tooltip_text (GTK_WIDGET (button), "Enregistrer un document sous...");
        g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_saveas), NULL);
        gtk_box_pack_start (GTK_BOX (button_box), button, expand, fill, padding);
      }
     
      /* Creation du bouton "Fermer" */
      {
        GtkWidget *button = NULL;
        button = gtk_button_new_from_icon_name("process-stop",GTK_ICON_SIZE_BUTTON);
        gtk_widget_set_tooltip_text (GTK_WIDGET (button), "Fermer le document");
        g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_close), NULL);
        gtk_box_pack_start (GTK_BOX (button_box), button, expand, fill, padding);
      }
     
      /* Creation du bouton "Quitter" */
      {
        GtkWidget *button = NULL;
     
        button = gtk_button_new_from_icon_name("application-exit",GTK_ICON_SIZE_BUTTON);
        gtk_widget_set_tooltip_text (GTK_WIDGET (button), "Quitter l'éditeur");
        g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_quit), NULL);
        gtk_box_pack_end (GTK_BOX (button_box), button, expand, fill, padding);
      }
    autre piste avec un menu toolbar
    ton menu toolbar est alimenté par 4 boutons qui auront chacun leur callback
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    GtkWidget * create_toolbar (GtkWidget *sourceview)
    {
    	GtkWidget *toolbar;
    	GtkToolItem *item;
    	GtkToolItem *Separator;
     
    	toolbar = gtk_toolbar_new ();
    	gtk_widget_set_valign (toolbar, GTK_ALIGN_CENTER);
     
    	/* production d'un lot de bouton */
    	item = gtk_tool_button_new (NULL, NULL);
    	gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "go-next");
    	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
    	g_signal_connect(item, "clicked",    G_CALLBACK	(cb_ButtonClicked_toNext),NULL);
     
    	item = gtk_tool_button_new (NULL, NULL);
    	gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "go-previous");
    	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
    	g_signal_connect(item, "clicked",    G_CALLBACK	(cb_ButtonClicked_toPrevious),NULL);
     
    	/* production d'un lot de bouton pour mon affaire*/
    	item = gtk_tool_button_new (NULL,NULL );
    	gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (item), "document-new");
    	gtk_tool_item_set_tooltip_markup (GTK_TOOL_ITEM (item), "Nouveau document");
    	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
    	g_signal_connect(item, "clicked",    G_CALLBACK	(cb_ButtonClicked_toNew),NULL);
     
    	item = gtk_tool_button_new (NULL,NULL);
    	gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (item),"document-open");
    	gtk_tool_item_set_tooltip_markup(GTK_TOOL_ITEM (item), "<b>Ouvrir</b> un fichier texte existant");  
    	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
    	g_signal_connect(item, "clicked",    G_CALLBACK	(cb_ButtonClicked_toOpen),NULL);
     
    	item = gtk_tool_button_new (NULL,NULL);
    	gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (item),"document-open-recent");
    	gtk_tool_item_set_tooltip_markup(GTK_TOOL_ITEM (item), "<b>Ouvrir</b> un fichier traité récemment");  
    	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
    	g_signal_connect(item, "clicked",    G_CALLBACK	(cb_ButtonClicked_toRecent),NULL);
     
    	item = gtk_tool_button_new (NULL,NULL );
    	gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (item), "document-save");
    	gtk_tool_item_set_tooltip_markup (GTK_TOOL_ITEM (item), "<b>Enregistrez</b> le fichier courant");  
    	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
    	g_signal_connect(item, "clicked",    G_CALLBACK	(cb_ButtonClicked_toSave),NULL);
     
    	item = gtk_tool_button_new (NULL,NULL );
    	gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (item), "document-save-as");
    	gtk_tool_item_set_tooltip_markup (GTK_TOOL_ITEM (item), "<b>Enregistrez</b> sous ....");  
    	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
    	g_signal_connect(item, "clicked",    G_CALLBACK	(cb_ButtonClicked_toSaveAs),NULL);
     
    	/* Avec des séparateurs */
    	Separator = gtk_separator_tool_item_new();
    	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), Separator, -1);
    	/* fin separator */
    3 dans chaque callback tu définis les 4 contextes


    modele de callback pour bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void cb_open (GtkWidget *widget, gpointer user_data)
    {
     
     ......
      /* Parametre inutilise */
      (void)widget;
      (void)user_data;
    }
    modele de callback pour toolbar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    gint cb_ButtonClicked_toSaveAs( GtkWidget *widget,GdkEvent  *event,  gpointer   data )
    {
     .......
      return(FALSE);
      (void)widget;
      (void)event;
      (void)data;
    }
    Merci pour le tuyau, je vais regarder ca de pres pour pouvoir avancer.

Discussions similaires

  1. [A relire] Exécuter des Applications GTK+
    Par gege2061 dans le forum Contribuez
    Réponses: 5
    Dernier message: 11/01/2008, 09h52
  2. Look and feel des applications GTK+ sous kde
    Par Leon Ira dans le forum Mandriva / Mageia
    Réponses: 0
    Dernier message: 28/10/2007, 12h43
  3. Réponses: 1
    Dernier message: 29/06/2007, 02h26
  4. Choix EDI pour développer applications Web simples
    Par med1 dans le forum EDI et Outils pour Java
    Réponses: 5
    Dernier message: 28/10/2006, 13h47
  5. [lacncement application] très simple
    Par requin01 dans le forum Eclipse Java
    Réponses: 11
    Dernier message: 29/05/2006, 08h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo