Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Andere GUIs - Qt, GTK+, wxWidgets ::  Problem bei Ausgabe auf gtk_window     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
lkneji
Unregistrierter




Beitrag lkneji Unregistrierter 11:31:57 10.03.2010   Titel:   Problem bei Ausgabe auf gtk_window            Zitieren

Hey leute, vielleicht kann mir einer bei meinem problem helfen. habe erst vor kurzem angefangen mich mit gtk in c zu beschäftigen, kann also sein, dass meine frage eine sehr banale für manche ist ;)

also, unten seht ihr meinen quellcode: in der menüleiste meines fensters möchte ich mit dem menüpunkt "/Telefonbuch/TB Oeffnen" auf die funktion "tb_open" zugreifen. In dieser funktion wiederum würde ich gerne eine ausgabe mittels label auf meinem hauptfenster erscheinen lassen. dazu habe ich so eine vbox angelegt und hatte gehofft, dass ich diese auf meinem fenster ausgeben kann. allerdings erscheint keine ausgabe bei betätigen des menüpunkts.
meine frage also: wie bekomme ich über eine andere klasse ausgaben oder andere dinge, wie textfelder etc. auf mein hauptfenster "fenster", welches ich in meiner mainfunktion angelegt habe.

hoffe, ihr versteht mein anliegen und vielen dank für eure hilfe :)

Code:
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdlib.h>
#include <gtk/gtk.h>

GtkWidget tb_open(GtkWidget *widget);
GtkWidget *menue_erzeugen(GtkWidget *fenster);

static GtkWidget *fenster;

/*Die Menüleiste*/
static GtkItemFactoryEntry menu_array[] =
{
  { "/_Telefonbuch", NULL, NULL, 0, "<Branch>" },
  { "/Telefonbuch/TB Oeffnen", "<control>O", tb_open, 0, NULL}, //hier rufe ich die funktion auf
  { "/Telefonbuch/Neu hinzufuegen", "<control>N", NULL, 0, NULL},
  { "/Telefonbuch/Eintrag suchen", "<control>S", NULL, 0, NULL},
  { "/Telefonbuch/sep1", NULL, NULL, 0, "<Separator>"},
  { "/Telefonbuch/Beenden", "<control>B", gtk_main_quit, 0, NULL},
 
  { "/_Optionen", NULL, NULL, 0, "<Branch>"},
  { "/_Optionen/Info", NULL, NULL, 0, NULL},
  { "/_Optionen/sep1", NULL, NULL, 0, "<Separator>"},
  { "/_Optionen/Hilfe", "<control>H", NULL, 0, NULL},  
};

GtkWidget *menue_erzeugen(GtkWidget *fenster)
{
   GtkWidget *menueleiste;
   GtkItemFactory *itemfact;
   GtkAccelGroup *accelgroup;
   
   gint msize = sizeof(menu_array) / sizeof(menu_array[0]);
   
   accelgroup = gtk_accel_group_new();
   
   itemfact = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", accelgroup);
   gtk_item_factory_create_items(itemfact, msize, menu_array, NULL);
   
   menueleiste = gtk_item_factory_get_widget(itemfact, "<main>");
   
   return menueleiste;        
}

void tb_open(GtkWidget *vbox)
{
   GtkWidget *label;
   GtkWidget *labelbox;
   
   labelbox = gtk_vbox_new (FALSE, 0);
   //labelbox = gtk_event_box_new();
   
   label = gtk_label_new("TB Oeffnen...");

   //gtk_box_pack_start(GTK_BOX(labelbox), label, FALSE, TRUE, 0);
   gtk_container_add(GTK_CONTAINER(labelbox), label);

   gtk_container_add(GTK_CONTAINER (fenster), labelbox);
   gtk_widget_show(labelbox);
   gtk_widget_show(label);
 
   gtk_widget_show(fenster);
 }

int main (int argc, char *argv[])
{
  GtkWidget *menueleiste;
  GtkWidget *hbox, *vbox;

  /* Initialize GTK+ */
  gtk_init (&argc, &argv);

  /* Create the main window */
  fenster = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_widget_set_usize(GTK_WIDGET (fenster),400, 500);
  gtk_window_set_title (GTK_WINDOW (fenster), "TB");
  gtk_window_set_position (GTK_WINDOW (fenster), GTK_WIN_POS_CENTER);
  g_signal_connect(GTK_OBJECT(fenster), "destroy", gtk_main_quit, NULL);

  /* Create a boxes */
  vbox = gtk_vbox_new (FALSE, 0);
  hbox = gtk_hbox_new (FALSE, 0);
  gtk_container_add(GTK_CONTAINER (fenster), vbox);
   
  /*Menüleiste initialisieren*/
  menueleiste = menue_erzeugen(fenster);
  gtk_box_pack_start(GTK_BOX(vbox), menueleiste, FALSE, TRUE, 0);
  gtk_widget_show(menueleiste);

  gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
 
  /* Enter the main loop */
  gtk_widget_show_all (fenster);
  gtk_main ();
  return 0;
}
Code:
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdlib.h>
#include <gtk/gtk.h>

GtkWidget tb_open(GtkWidget *widget);
GtkWidget *menue_erzeugen(GtkWidget *fenster);

static GtkWidget *fenster;

/*Die Menüleiste*/
static GtkItemFactoryEntry menu_array[] =
{
{ "/_Telefonbuch", NULL, NULL, 0, "<Branch>" },
{ "/Telefonbuch/TB Oeffnen", "<control>O", tb_open, 0, NULL}, //hier rufe ich die funktion auf
{ "/Telefonbuch/Neu hinzufuegen", "<control>N", NULL, 0, NULL},
{ "/Telefonbuch/Eintrag suchen", "<control>S", NULL, 0, NULL},
{ "/Telefonbuch/sep1", NULL, NULL, 0, "<Separator>"},
{ "/Telefonbuch/Beenden", "<control>B", gtk_main_quit, 0, NULL},

{ "/_Optionen", NULL, NULL, 0, "<Branch>"},
{ "/_Optionen/Info", NULL, NULL, 0, NULL},
{ "/_Optionen/sep1", NULL, NULL, 0, "<Separator>"},
{ "/_Optionen/Hilfe", "<control>H", NULL, 0, NULL},
};

GtkWidget *menue_erzeugen(GtkWidget *fenster)
{
GtkWidget *menueleiste;
GtkItemFactory *itemfact;
GtkAccelGroup *accelgroup;

gint msize = sizeof(menu_array) / sizeof(menu_array[0]);

accelgroup = gtk_accel_group_new();

itemfact = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", accelgroup);
gtk_item_factory_create_items(itemfact, msize, menu_array, NULL);

menueleiste = gtk_item_factory_get_widget(itemfact, "<main>");

return menueleiste;
}

void tb_open(GtkWidget *vbox)
{
GtkWidget *label;
GtkWidget *labelbox;

labelbox = gtk_vbox_new (FALSE, 0);
//labelbox = gtk_event_box_new();

label = gtk_label_new("TB Oeffnen...");

//gtk_box_pack_start(GTK_BOX(labelbox), label, FALSE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(labelbox), label);

gtk_container_add(GTK_CONTAINER (fenster), labelbox);
gtk_widget_show(labelbox);
gtk_widget_show(label);

gtk_widget_show(fenster);
}

int main (int argc, char *argv[])
{
GtkWidget *menueleiste;
GtkWidget *hbox, *vbox;

/* Initialize GTK+ */
gtk_init (&argc, &argv);

/* Create the main window */
fenster = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_set_usize(GTK_WIDGET (fenster),400, 500);
gtk_window_set_title (GTK_WINDOW (fenster), "TB");
gtk_window_set_position (GTK_WINDOW (fenster), GTK_WIN_POS_CENTER);
g_signal_connect(GTK_OBJECT(fenster), "destroy", gtk_main_quit, NULL);

/* Create a boxes */
vbox = gtk_vbox_new (FALSE, 0);
hbox = gtk_hbox_new (FALSE, 0);
gtk_container_add(GTK_CONTAINER (fenster), vbox);

/*Menüleiste initialisieren*/
menueleiste = menue_erzeugen(fenster);
gtk_box_pack_start(GTK_BOX(vbox), menueleiste, FALSE, TRUE, 0);
gtk_widget_show(menueleiste);

gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);

/* Enter the main loop */
gtk_widget_show_all (fenster);
gtk_main ();
return 0;
}
Code:
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdlib.h>
#include <gtk/gtk.h>

GtkWidget tb_open(GtkWidget *widget);
GtkWidget *menue_erzeugen(GtkWidget *fenster);

static GtkWidget *fenster;

/*Die Menüleiste*/
static GtkItemFactoryEntry menu_array[] =
{
  { "/_Telefonbuch", NULL, NULL, 0, "<Branch>" },
  { "/Telefonbuch/TB Oeffnen", "<control>O", tb_open, 0, NULL}, //hier rufe ich die funktion auf
  { "/Telefonbuch/Neu hinzufuegen", "<control>N", NULL, 0, NULL},
  { "/Telefonbuch/Eintrag suchen", "<control>S", NULL, 0, NULL},
  { "/Telefonbuch/sep1", NULL, NULL, 0, "<Separator>"},
  { "/Telefonbuch/Beenden", "<control>B", gtk_main_quit, 0, NULL},
 
  { "/_Optionen", NULL, NULL, 0, "<Branch>"},
  { "/_Optionen/Info", NULL, NULL, 0, NULL},
  { "/_Optionen/sep1", NULL, NULL, 0, "<Separator>"},
  { "/_Optionen/Hilfe", "<control>H", NULL, 0, NULL},  
};

GtkWidget *menue_erzeugen(GtkWidget *fenster)
{
   GtkWidget *menueleiste;
   GtkItemFactory *itemfact;
   GtkAccelGroup *accelgroup;
   
   gint msize = sizeof(menu_array) / sizeof(menu_array[0]);
   
   accelgroup = gtk_accel_group_new();
   
   itemfact = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", accelgroup);
   gtk_item_factory_create_items(itemfact, msize, menu_array, NULL);
   
   menueleiste = gtk_item_factory_get_widget(itemfact, "<main>");
   
   return menueleiste;        
}

void tb_open(GtkWidget *vbox)
{
   GtkWidget *label;
   GtkWidget *labelbox;
   
   labelbox = gtk_vbox_new (FALSE, 0);
   //labelbox = gtk_event_box_new();
   
   label = gtk_label_new("TB Oeffnen...");

   //gtk_box_pack_start(GTK_BOX(labelbox), label, FALSE, TRUE, 0);
   gtk_container_add(GTK_CONTAINER(labelbox), label);

   gtk_container_add(GTK_CONTAINER (fenster), labelbox);
   gtk_widget_show(labelbox);
   gtk_widget_show(label);
 
   gtk_widget_show(fenster);
 }

int main (int argc, char *argv[])
{
  GtkWidget *menueleiste;
  GtkWidget *hbox, *vbox;

  /* Initialize GTK+ */
  gtk_init (&argc, &argv);

  /* Create the main window */
  fenster = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_widget_set_usize(GTK_WIDGET (fenster),400, 500);
  gtk_window_set_title (GTK_WINDOW (fenster), "TB");
  gtk_window_set_position (GTK_WINDOW (fenster), GTK_WIN_POS_CENTER);
  g_signal_connect(GTK_OBJECT(fenster), "destroy", gtk_main_quit, NULL);

  /* Create a boxes */
  vbox = gtk_vbox_new (FALSE, 0);
  hbox = gtk_hbox_new (FALSE, 0);
  gtk_container_add(GTK_CONTAINER (fenster), vbox);
   
  /*Menüleiste initialisieren*/
  menueleiste = menue_erzeugen(fenster);
  gtk_box_pack_start(GTK_BOX(vbox), menueleiste, FALSE, TRUE, 0);
  gtk_widget_show(menueleiste);

  gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
 
  /* Enter the main loop */
  gtk_widget_show_all (fenster);
  gtk_main ();
  return 0;
}
lkneji
Unregistrierter




Beitrag lkneji Unregistrierter 23:08:37 11.03.2010   Titel:   :(            Zitieren

hat denn niemand eine idee?
GPC
Moderator

Benutzerprofil
Anmeldungsdatum: 11.07.2004
Beiträge: 6302
Beitrag GPC Moderator 15:21:05 13.03.2010   Titel:              Zitieren

Vielleicht hätte ich eine, aber dein Code ist so nicht kompilierbar und ich will ja nicht alles selbst machen :). Schau dir nur mal die Deklaration von tb_open an und dann die Definition davon.

Generell gilt: Wenn du etwas auf das Hauptfenster (bzw. ein Control darin) schreiben willst, musst du eben einen Pointer darauf zur Verfügung stellen. Der einfachste weg ist ein globaler Pointer. Ein sauberer Weg ist dass man das in einer Funktion wegkapselt.
C/C++ Forum :: Andere GUIs - Qt, GTK+, wxWidgets ::  Problem bei Ausgabe auf gtk_window   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.