Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
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 :: FAQ - GUIs ::  gtkmm Beispiel Programm Pt. 2     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
evilissimo
Chefkoch

Benutzerprofil
Anmeldungsdatum: 11.11.2003
Beiträge: 2281
Beitrag evilissimo Chefkoch 01:36:30 21.06.2005   Titel:   gtkmm Beispiel Programm Pt. 2            Zitieren

Bei diesem Beispiel zeige ich euch eine Möglichkeit Boxes zuverwenden.
Boxes sind Widget-( Komponenten ) Container die mindestens 1 Objekt aufnehmen. Gtk+ und somit auch gtkmm ist nach dem Boxen prinzip aufgebaut, ein Fenster (z.B Gtk::Window) kann nur 1 Objekt aufnehmen, aber da ein Fenster meist aus vielen Objekten besteht, kann man dort z.b. ein VBox einfügen und somit dann beliebig viele sub elemente mit vertikaler Anordnung hinzufügen, oder mit einem HBox in Horizontaler Anordnung.

Es gibt auch ein Table das eben eine Tabelle für solche boxen bereitstellt, aber auf das komm ich später mal.



C/C++ Code:
#include <gtkmm.h> // Bindet alles was man für gtkmm braucht ein (Braucht dann alles auch länger beim kompilieren
C/C++ Code:
#include <gtkmm.h> // Bindet alles was man für gtkmm braucht ein (Braucht dann alles auch länger beim kompilieren
C/C++ Code:
#include <gtkmm.h> // Bindet alles was man für gtkmm braucht ein (Braucht dann alles auch länger beim kompilieren


C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
struct MyWindow : public Gtk::Window
{
  MyWindow(); // Konstruktor

  Gtk::Button  m_ok_button;   // Button Objekt, wegen der Initialisierungsliste das erste Objekt!

  Gtk::Entry   m_edit;      // Ein Editfeld bzw Entry

  Gtk::Label   m_labels[2];  // 2 Labels / Textfelder
  enum { MW_Label1 , MW_Label2 }; // Index ersatz für unser Label Array

  void on_button_ok_clicked(); // Funktion die beim Clicked-Signal des Buttons ausgeführt wird
};
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
struct MyWindow : public Gtk::Window
{
MyWindow(); // Konstruktor

Gtk::Button m_ok_button; // Button Objekt, wegen der Initialisierungsliste das erste Objekt!

Gtk::Entry m_edit; // Ein Editfeld bzw Entry

Gtk::Label m_labels[2]; // 2 Labels / Textfelder
enum { MW_Label1 , MW_Label2 }; // Index ersatz für unser Label Array

void on_button_ok_clicked(); // Funktion die beim Clicked-Signal des Buttons ausgeführt wird
};
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
struct MyWindow : public Gtk::Window
{
  MyWindow(); // Konstruktor

  Gtk::Button  m_ok_button;   // Button Objekt, wegen der Initialisierungsliste das erste Objekt!

  Gtk::Entry   m_edit;      // Ein Editfeld bzw Entry

  Gtk::Label   m_labels[2];  // 2 Labels / Textfelder
  enum { MW_Label1 , MW_Label2 }; // Index ersatz für unser Label Array

  void on_button_ok_clicked(); // Funktion die beim Clicked-Signal des Buttons ausgeführt wird
};



Es gibt in Gtk+/gtkmm so genannte Stockitems das sind Bilder und Texte die sich an die aktuellen Style Einstellungen anpassen und an das aktuelle locale

Wir benutzen für unseren Button einfach mal das Standard OK, und machen das folgendermaßen, in der Initialisierungsliste des Konstruktors. Da Elemente der Reihenfolge nach in der Intialisierungsliste aufgeführt werden müssen haben wir auch in der Deklaration den Button als erstes angegeben.
C/C++ Code:
MyWindow::MyWindow()
: m_ok_button(Gtk::Stock::OK)
{
C/C++ Code:
MyWindow::MyWindow()
: m_ok_button(Gtk::Stock::OK)
{
C/C++ Code:
MyWindow::MyWindow()
: m_ok_button(Gtk::Stock::OK)
{



C/C++ 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
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
  set_title(Glib::locale_to_utf8("gtkmm Beispiel 2")); // Setzen des Fenstertitels

  Gtk::VBox * vbox = new Gtk::VBox;         // Wir erstellen eine Vertikale Box für unsere widgets

  add(*Gtk::manage(vbox));                  // Wir übergeben die VBox an unser Fenster und sorgen dafür das es automatisch gelöscht wird
 
  vbox->set_homogeneous(true);  // für gleichmässigkeit sorgen
  vbox->set_spacing( 10 );      // Platzzwischen den Elementen des VBoxes
  vbox->set_border_width( 10 ); // Randbreite auf 10 Pixel setzen

  vbox->pack_start( m_labels[ MW_Label1 ],true,true); // Wir fügen das erste Label in den ersten Abschnitt des vbox ein

  Gtk::HBox * hbox = new Gtk::HBox; // Neues Box objekt ( Horizontal (wer hätte das gedacht ? ;) ) )

  vbox->pack_start( *Gtk::manage( hbox ));  // Nun übergeben wir das HBox und sorgen, wie wir das beim VBox auch getan haben dafür dass user Objekt automatisch gelöscht wird

  hbox->pack_start( m_labels[ MW_Label2 ] ); // Nun fügen wir das 2te Label noch hinzu

  hbox->pack_start( m_edit ); // Nun noch das Editfeld / Entry
  hbox->set_spacing( 15 );

  vbox->pack_start( m_ok_button );  // Und den natürlich dann den button Button

  // Nun setzen wir den Text der Labels

  m_labels[MW_Label1].set_text(Glib::locale_to_utf8("Gib nen Text ein und klick OK!"));
  m_labels[MW_Label2].set_text(Glib::locale_to_utf8("Text eingeben: "));
 
  // Wir setzen die Callback Methode für das click signal
  m_ok_button.signal_clicked().connect( sigc::mem_fun(*this,&MyWindow::on_button_ok_clicked));  
  // Alle Widgets anzeigen
  show_all();
}

void MyWindow::on_button_ok_clicked()
{
  // Wir lesen den Text vom Entry und übergeben diesen an das Label
  m_labels[MW_Label1].set_text( m_edit.get_text());
}
C/C++ 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
set_title(Glib::locale_to_utf8("gtkmm Beispiel 2")); // Setzen des Fenstertitels

Gtk::VBox * vbox = new Gtk::VBox; // Wir erstellen eine Vertikale Box für unsere widgets

add(*Gtk::manage(vbox)); // Wir übergeben die VBox an unser Fenster und sorgen dafür das es automatisch gelöscht wird

vbox->set_homogeneous(true); // für gleichmässigkeit sorgen
vbox->set_spacing( 10 ); // Platzzwischen den Elementen des VBoxes
vbox->set_border_width( 10 ); // Randbreite auf 10 Pixel setzen

vbox->pack_start( m_labels[ MW_Label1 ],true,true); // Wir fügen das erste Label in den ersten Abschnitt des vbox ein

Gtk::HBox * hbox = new Gtk::HBox; // Neues Box objekt ( Horizontal (wer hätte das gedacht ? ;) ) )

vbox->pack_start( *Gtk::manage( hbox )); // Nun übergeben wir das HBox und sorgen, wie wir das beim VBox auch getan haben dafür dass user Objekt automatisch gelöscht wird

hbox->pack_start( m_labels[ MW_Label2 ] ); // Nun fügen wir das 2te Label noch hinzu

hbox->pack_start( m_edit ); // Nun noch das Editfeld / Entry
hbox->set_spacing( 15 );

vbox->pack_start( m_ok_button ); // Und den natürlich dann den button Button

// Nun setzen wir den Text der Labels

m_labels[MW_Label1].set_text(Glib::locale_to_utf8("Gib nen Text ein und klick OK!"));
m_labels[MW_Label2].set_text(Glib::locale_to_utf8("Text eingeben: "));

// Wir setzen die Callback Methode für das click signal
m_ok_button.signal_clicked().connect( sigc::mem_fun(*this,&MyWindow::on_button_ok_clicked));
// Alle Widgets anzeigen
show_all();
}

void MyWindow::on_button_ok_clicked()
{
// Wir lesen den Text vom Entry und übergeben diesen an das Label
m_labels[MW_Label1].set_text( m_edit.get_text());
}
C/C++ 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
  set_title(Glib::locale_to_utf8("gtkmm Beispiel 2")); // Setzen des Fenstertitels

  Gtk::VBox * vbox = new Gtk::VBox;         // Wir erstellen eine Vertikale Box für unsere widgets

  add(*Gtk::manage(vbox));                  // Wir übergeben die VBox an unser Fenster und sorgen dafür das es automatisch gelöscht wird
 
  vbox->set_homogeneous(true);  // für gleichmässigkeit sorgen
  vbox->set_spacing( 10 );      // Platzzwischen den Elementen des VBoxes
  vbox->set_border_width( 10 ); // Randbreite auf 10 Pixel setzen

  vbox->pack_start( m_labels[ MW_Label1 ],true,true); // Wir fügen das erste Label in den ersten Abschnitt des vbox ein

  Gtk::HBox * hbox = new Gtk::HBox; // Neues Box objekt ( Horizontal (wer hätte das gedacht ? ;) ) )

  vbox->pack_start( *Gtk::manage( hbox ));  // Nun übergeben wir das HBox und sorgen, wie wir das beim VBox auch getan haben dafür dass user Objekt automatisch gelöscht wird

  hbox->pack_start( m_labels[ MW_Label2 ] ); // Nun fügen wir das 2te Label noch hinzu

  hbox->pack_start( m_edit ); // Nun noch das Editfeld / Entry
  hbox->set_spacing( 15 );

  vbox->pack_start( m_ok_button );  // Und den natürlich dann den button Button

  // Nun setzen wir den Text der Labels

  m_labels[MW_Label1].set_text(Glib::locale_to_utf8("Gib nen Text ein und klick OK!"));
  m_labels[MW_Label2].set_text(Glib::locale_to_utf8("Text eingeben: "));
 
  // Wir setzen die Callback Methode für das click signal
  m_ok_button.signal_clicked().connect( sigc::mem_fun(*this,&MyWindow::on_button_ok_clicked));  
  // Alle Widgets anzeigen
  show_all();
}

void MyWindow::on_button_ok_clicked()
{
  // Wir lesen den Text vom Entry und übergeben diesen an das Label
  m_labels[MW_Label1].set_text( m_edit.get_text());
}



So und zu guter letzt das ganze Programm incl. main()
C/C++ 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
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
#include <gtkmm.h>
struct MyWindow : public Gtk::Window
{
  MyWindow();
  Gtk::Button m_ok_button;
  Gtk::Entry   m_edit;
  Gtk::Label  m_labels[2];
  enum { MW_Label1 , MW_Label2 };
 
  void on_button_ok_clicked();
};

int main(int argc, char**argv)
{
  Gtk::Main main_obj(argc,argv);
 
  MyWindow window_obj;
 
  main_obj.run(window_obj);
 
  return EXIT_SUCCESS;  
}

MyWindow::MyWindow()
: m_ok_button(Gtk::Stock::OK)
{
  set_title(Glib::locale_to_utf8("gtkmm Beispiel 2"));
  Gtk::VBox * vbox = new Gtk::VBox;        
  add(*Gtk::manage(vbox));                  
  vbox->set_homogeneous(true);
  vbox->set_spacing( 10 );
  vbox->set_border_width( 10 );
  vbox->pack_start( m_labels[ MW_Label1 ],true,true);
  Gtk::HBox * hbox = new Gtk::HBox;
  vbox->pack_start( *Gtk::manage( hbox ));  
  hbox->pack_start( m_labels[ MW_Label2 ] );
  hbox->pack_start( m_edit );
  hbox->set_spacing( 15 );
  vbox->pack_start( m_ok_button );  
  m_labels[MW_Label1].set_text(Glib::locale_to_utf8("Gib nen Text ein und klick OK!"));
  m_labels[MW_Label2].set_text(Glib::locale_to_utf8("Text eingeben: "));
  m_ok_button.signal_clicked().connect( sigc::mem_fun(*this,&MyWindow::on_button_ok_clicked));  
  show_all();
}

void MyWindow::on_button_ok_clicked()
{
  m_labels[MW_Label1].set_text( m_edit.get_text());
}
C/C++ 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
#include <gtkmm.h>
struct MyWindow : public Gtk::Window
{
MyWindow();
Gtk::Button m_ok_button;
Gtk::Entry m_edit;
Gtk::Label m_labels[2];
enum { MW_Label1 , MW_Label2 };

void on_button_ok_clicked();
};

int main(int argc, char**argv)
{
Gtk::Main main_obj(argc,argv);

MyWindow window_obj;

main_obj.run(window_obj);

return EXIT_SUCCESS;
}

MyWindow::MyWindow()
: m_ok_button(Gtk::Stock::OK)
{
set_title(Glib::locale_to_utf8("gtkmm Beispiel 2"));
Gtk::VBox * vbox = new Gtk::VBox;
add(*Gtk::manage(vbox));
vbox->set_homogeneous(true);
vbox->set_spacing( 10 );
vbox->set_border_width( 10 );
vbox->pack_start( m_labels[ MW_Label1 ],true,true);
Gtk::HBox * hbox = new Gtk::HBox;
vbox->pack_start( *Gtk::manage( hbox ));
hbox->pack_start( m_labels[ MW_Label2 ] );
hbox->pack_start( m_edit );
hbox->set_spacing( 15 );
vbox->pack_start( m_ok_button );
m_labels[MW_Label1].set_text(Glib::locale_to_utf8("Gib nen Text ein und klick OK!"));
m_labels[MW_Label2].set_text(Glib::locale_to_utf8("Text eingeben: "));
m_ok_button.signal_clicked().connect( sigc::mem_fun(*this,&MyWindow::on_button_ok_clicked));
show_all();
}

void MyWindow::on_button_ok_clicked()
{
m_labels[MW_Label1].set_text( m_edit.get_text());
}
C/C++ 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
#include <gtkmm.h>
struct MyWindow : public Gtk::Window
{
  MyWindow();
  Gtk::Button m_ok_button;
  Gtk::Entry   m_edit;
  Gtk::Label  m_labels[2];
  enum { MW_Label1 , MW_Label2 };
 
  void on_button_ok_clicked();
};

int main(int argc, char**argv)
{
  Gtk::Main main_obj(argc,argv);
 
  MyWindow window_obj;
 
  main_obj.run(window_obj);
 
  return EXIT_SUCCESS;  
}

MyWindow::MyWindow()
: m_ok_button(Gtk::Stock::OK)
{
  set_title(Glib::locale_to_utf8("gtkmm Beispiel 2"));
  Gtk::VBox * vbox = new Gtk::VBox;        
  add(*Gtk::manage(vbox));                  
  vbox->set_homogeneous(true);
  vbox->set_spacing( 10 );
  vbox->set_border_width( 10 );
  vbox->pack_start( m_labels[ MW_Label1 ],true,true);
  Gtk::HBox * hbox = new Gtk::HBox;
  vbox->pack_start( *Gtk::manage( hbox ));  
  hbox->pack_start( m_labels[ MW_Label2 ] );
  hbox->pack_start( m_edit );
  hbox->set_spacing( 15 );
  vbox->pack_start( m_ok_button );  
  m_labels[MW_Label1].set_text(Glib::locale_to_utf8("Gib nen Text ein und klick OK!"));
  m_labels[MW_Label2].set_text(Glib::locale_to_utf8("Text eingeben: "));
  m_ok_button.signal_clicked().connect( sigc::mem_fun(*this,&MyWindow::on_button_ok_clicked));  
  show_all();
}

void MyWindow::on_button_ok_clicked()
{
  m_labels[MW_Label1].set_text( m_edit.get_text());
}




Fragen,Anregungen und/oder Verbesserungsvorschläge erwünscht !

MfG until next part :cool:

PS: Hier geht es 1. nicht um den Codingstyle und 2. auch nicht um die möglichst kürzeste lösung, wollt ich nur mal anmerken!

_________________
evilissimo - R.I.P. dmr
< Moderator im C++/CLI Forum und im C++ Forum >
About Singletons: "Anyway, if our experts can make this mistake, you have made it and you don't even know about it."


Zuletzt bearbeitet von evilissimo am 03:17:51 21.06.2005, insgesamt 4-mal bearbeitet
Werbeunterbrechung
evilissimo
Chefkoch

Benutzerprofil
Anmeldungsdatum: 11.11.2003
Beiträge: 2281
Beitrag evilissimo Chefkoch 02:16:00 21.06.2005   Titel:              Zitieren

Hier noch einmal das gleiche in einer reduzierten Form. mit 41 Zeilen

C/C++ 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
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
#include <gtkmm.h>
struct MyWindow : public Gtk::Window
{
  MyWindow();
  Gtk::Button m_ok_button;
  Gtk::VBox   m_vbox;
  Gtk::HBox   m_hbox;
  Gtk::Entry  m_edit;
  Gtk::Label  m_labels[2];
  enum { MW_Label1 , MW_Label2 };
  void on_button_ok_clicked();
};
int main(int argc, char**argv)
{
  Gtk::Main main_obj(argc,argv);
  MyWindow window_obj;
  main_obj.run(window_obj);
  return EXIT_SUCCESS;  
}
MyWindow::MyWindow()
: m_ok_button(Gtk::Stock::OK),
  m_vbox(true  , 10),
  m_hbox(false , 15)
{
  set_title(Glib::locale_to_utf8("gtkmm Beispiel 2"));
  add(m_vbox);                  
  m_vbox.set_border_width( 10 );
  m_vbox.pack_start( m_labels[ MW_Label1 ],true,true);
  m_vbox.pack_start( m_hbox );  
  m_hbox.pack_start( m_labels[ MW_Label2 ] );
  m_hbox.pack_start( m_edit );
  m_vbox.pack_start( m_ok_button );  
  m_labels[MW_Label1].set_text(Glib::locale_to_utf8("Gib nen Text ein und klick OK!"));
  m_labels[MW_Label2].set_text(Glib::locale_to_utf8("Text eingeben: "));
  m_ok_button.signal_clicked().connect( sigc::mem_fun(*this,&MyWindow::on_button_ok_clicked));  
  show_all();
}
void MyWindow::on_button_ok_clicked()
{
  m_labels[MW_Label1].set_text( m_edit.get_text());
}
C/C++ 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
#include <gtkmm.h>
struct MyWindow : public Gtk::Window
{
MyWindow();
Gtk::Button m_ok_button;
Gtk::VBox m_vbox;
Gtk::HBox m_hbox;
Gtk::Entry m_edit;
Gtk::Label m_labels[2];
enum { MW_Label1 , MW_Label2 };
void on_button_ok_clicked();
};
int main(int argc, char**argv)
{
Gtk::Main main_obj(argc,argv);
MyWindow window_obj;
main_obj.run(window_obj);
return EXIT_SUCCESS;
}
MyWindow::MyWindow()
: m_ok_button(Gtk::Stock::OK),
m_vbox(true , 10),
m_hbox(false , 15)
{
set_title(Glib::locale_to_utf8("gtkmm Beispiel 2"));
add(m_vbox);
m_vbox.set_border_width( 10 );
m_vbox.pack_start( m_labels[ MW_Label1 ],true,true);
m_vbox.pack_start( m_hbox );
m_hbox.pack_start( m_labels[ MW_Label2 ] );
m_hbox.pack_start( m_edit );
m_vbox.pack_start( m_ok_button );
m_labels[MW_Label1].set_text(Glib::locale_to_utf8("Gib nen Text ein und klick OK!"));
m_labels[MW_Label2].set_text(Glib::locale_to_utf8("Text eingeben: "));
m_ok_button.signal_clicked().connect( sigc::mem_fun(*this,&MyWindow::on_button_ok_clicked));
show_all();
}
void MyWindow::on_button_ok_clicked()
{
m_labels[MW_Label1].set_text( m_edit.get_text());
}
C/C++ 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
#include <gtkmm.h>
struct MyWindow : public Gtk::Window
{
  MyWindow();
  Gtk::Button m_ok_button;
  Gtk::VBox   m_vbox;
  Gtk::HBox   m_hbox;
  Gtk::Entry  m_edit;
  Gtk::Label  m_labels[2];
  enum { MW_Label1 , MW_Label2 };
  void on_button_ok_clicked();
};
int main(int argc, char**argv)
{
  Gtk::Main main_obj(argc,argv);
  MyWindow window_obj;
  main_obj.run(window_obj);
  return EXIT_SUCCESS;  
}
MyWindow::MyWindow()
: m_ok_button(Gtk::Stock::OK),
  m_vbox(true  , 10),
  m_hbox(false , 15)
{
  set_title(Glib::locale_to_utf8("gtkmm Beispiel 2"));
  add(m_vbox);                  
  m_vbox.set_border_width( 10 );
  m_vbox.pack_start( m_labels[ MW_Label1 ],true,true);
  m_vbox.pack_start( m_hbox );  
  m_hbox.pack_start( m_labels[ MW_Label2 ] );
  m_hbox.pack_start( m_edit );
  m_vbox.pack_start( m_ok_button );  
  m_labels[MW_Label1].set_text(Glib::locale_to_utf8("Gib nen Text ein und klick OK!"));
  m_labels[MW_Label2].set_text(Glib::locale_to_utf8("Text eingeben: "));
  m_ok_button.signal_clicked().connect( sigc::mem_fun(*this,&MyWindow::on_button_ok_clicked));  
  show_all();
}
void MyWindow::on_button_ok_clicked()
{
  m_labels[MW_Label1].set_text( m_edit.get_text());
}

_________________
evilissimo - R.I.P. dmr
< Moderator im C++/CLI Forum und im C++ Forum >
About Singletons: "Anyway, if our experts can make this mistake, you have made it and you don't even know about it."
Jester
Moderator

Benutzerprofil
Anmeldungsdatum: 06.04.2001
Beiträge: 8281
Beitrag Jester Moderator 09:08:18 21.06.2005   Titel:   Re: gtkmm Beispiel Programm Pt. 2            Zitieren

eViLiSSiMo schrieb:

PS: Hier geht es 1. nicht um den Codingstyle


Das stimmt zwar einerseits, aber andererseits passiert mir bei GUI-Code immer genau das: der Code wird häßlich.

Ist es also generell so: GUI-Code muß häßlich sein?

Oder kann man das auch schön machen? Wenn ja, dann wäre es schön, wenn Du auch das zeigen könntest. Gehört nämlich irgendwie schon dazu. Außerdem denke ich, daß viele Leute Schwierigkeiten haben ihre GUI Code-mäßig sauber zu strukturieren.

Btw.: Schönes "Tutorial" :leak:

_________________
Mod im Mathe-Forum

Die dümmsten Programmierer schreiben die dicksten Programme.
evilissimo
Chefkoch

Benutzerprofil
Anmeldungsdatum: 11.11.2003
Beiträge: 2281
Beitrag evilissimo Chefkoch 09:28:33 21.06.2005   Titel:              Zitieren

Also viel besser als das so zumachen, geht es kaum. ( Zumindest nicht ohne libglademm )

C/C++ 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
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
#include <gtkmm.h>

struct MyWindow : public Gtk::Window
{
  MyWindow();
  void on_button_ok_clicked();
  private:
  // Widgets
  Gtk::Button m_ok_button;
  Gtk::VBox   m_vbox;
  Gtk::HBox   m_hbox;
  Gtk::Entry  m_edit;
  Gtk::Label  m_labels[2];
 
  enum { MW_Label1 , MW_Label2 };

  // Setup Methoden
  void setup_vbox();
  void setup_hbox();
 
  void set_label_text( unsigned label , Glib::ustring const & text , bool to_utf8 = false );
};


int main(int argc, char**argv)
{
  Gtk::Main main_obj(argc,argv);
  MyWindow window_obj;
  main_obj.run(window_obj);
  return EXIT_SUCCESS;  
}


MyWindow::MyWindow()
: m_ok_button(Gtk::Stock::OK),
  m_vbox(true  , 10),
  m_hbox(false , 15)
{  
  set_title(Glib::locale_to_utf8("gtkmm Beispiel 2"));

  setup_vbox();
  setup_hbox();
 
  m_ok_button.signal_clicked().connect( sigc::mem_fun(*this,&MyWindow::on_button_ok_clicked));  

  show_all();
}

void MyWindow::on_button_ok_clicked()
{
  set_label_text( MW_Label1 , m_edit.get_text());
}

void MyWindow::setup_vbox()
{
  add(m_vbox);                  
  m_vbox.set_border_width( 10 );
  m_vbox.pack_start( m_labels[ MW_Label1 ],true,true);
  set_label_text(MW_Label1,"Gib nen Text ein und klick OK!",true);
  m_vbox.pack_start( m_hbox );  
  m_vbox.pack_start( m_ok_button );  
}

void MyWindow::setup_hbox()
{
  m_hbox.pack_start( m_labels[ MW_Label2 ] );
  m_hbox.pack_start( m_edit );
  set_label_text(MW_Label2,"Text eingeben: ",true);
}

void MyWindow::set_label_text( unsigned label , Glib::ustring const & text , bool to_utf8 )
{
  if(to_utf8)
     m_labels[label].set_text(text);
  else
     m_labels[label].set_text(Glib::locale_to_utf8(text));
}
C/C++ 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
#include <gtkmm.h>

struct MyWindow : public Gtk::Window
{
MyWindow();
void on_button_ok_clicked();
private:
// Widgets
Gtk::Button m_ok_button;
Gtk::VBox m_vbox;
Gtk::HBox m_hbox;
Gtk::Entry m_edit;
Gtk::Label m_labels[2];

enum { MW_Label1 , MW_Label2 };

// Setup Methoden
void setup_vbox();
void setup_hbox();

void set_label_text( unsigned label , Glib::ustring const & text , bool to_utf8 = false );
};


int main(int argc, char**argv)
{
Gtk::Main main_obj(argc,argv);
MyWindow window_obj;
main_obj.run(window_obj);
return EXIT_SUCCESS;
}


MyWindow::MyWindow()
: m_ok_button(Gtk::Stock::OK),
m_vbox(true , 10),
m_hbox(false , 15)
{
set_title(Glib::locale_to_utf8("gtkmm Beispiel 2"));

setup_vbox();
setup_hbox();

m_ok_button.signal_clicked().connect( sigc::mem_fun(*this,&MyWindow::on_button_ok_clicked));

show_all();
}

void MyWindow::on_button_ok_clicked()
{
set_label_text( MW_Label1 , m_edit.get_text());
}

void MyWindow::setup_vbox()
{
add(m_vbox);
m_vbox.set_border_width( 10 );
m_vbox.pack_start( m_labels[ MW_Label1 ],true,true);
set_label_text(MW_Label1,"Gib nen Text ein und klick OK!",true);
m_vbox.pack_start( m_hbox );
m_vbox.pack_start( m_ok_button );
}

void MyWindow::setup_hbox()
{
m_hbox.pack_start( m_labels[ MW_Label2 ] );
m_hbox.pack_start( m_edit );
set_label_text(MW_Label2,"Text eingeben: ",true);
}

void MyWindow::set_label_text( unsigned label , Glib::ustring const & text , bool to_utf8 )
{
if(to_utf8)
m_labels[label].set_text(text);
else
m_labels[label].set_text(Glib::locale_to_utf8(text));
}
C/C++ 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
#include <gtkmm.h>

struct MyWindow : public Gtk::Window
{
  MyWindow();
  void on_button_ok_clicked();
  private:
  // Widgets
  Gtk::Button m_ok_button;
  Gtk::VBox   m_vbox;
  Gtk::HBox   m_hbox;
  Gtk::Entry  m_edit;
  Gtk::Label  m_labels[2];
 
  enum { MW_Label1 , MW_Label2 };

  // Setup Methoden
  void setup_vbox();
  void setup_hbox();
 
  void set_label_text( unsigned label , Glib::ustring const & text , bool to_utf8 = false );
};


int main(int argc, char**argv)
{
  Gtk::Main main_obj(argc,argv);
  MyWindow window_obj;
  main_obj.run(window_obj);
  return EXIT_SUCCESS;  
}


MyWindow::MyWindow()
: m_ok_button(Gtk::Stock::OK),
  m_vbox(true  , 10),
  m_hbox(false , 15)
{  
  set_title(Glib::locale_to_utf8("gtkmm Beispiel 2"));

  setup_vbox();
  setup_hbox();
 
  m_ok_button.signal_clicked().connect( sigc::mem_fun(*this,&MyWindow::on_button_ok_clicked));  

  show_all();
}

void MyWindow::on_button_ok_clicked()
{
  set_label_text( MW_Label1 , m_edit.get_text());
}

void MyWindow::setup_vbox()
{
  add(m_vbox);                  
  m_vbox.set_border_width( 10 );
  m_vbox.pack_start( m_labels[ MW_Label1 ],true,true);
  set_label_text(MW_Label1,"Gib nen Text ein und klick OK!",true);
  m_vbox.pack_start( m_hbox );  
  m_vbox.pack_start( m_ok_button );  
}

void MyWindow::setup_hbox()
{
  m_hbox.pack_start( m_labels[ MW_Label2 ] );
  m_hbox.pack_start( m_edit );
  set_label_text(MW_Label2,"Text eingeben: ",true);
}

void MyWindow::set_label_text( unsigned label , Glib::ustring const & text , bool to_utf8 )
{
  if(to_utf8)
     m_labels[label].set_text(text);
  else
     m_labels[label].set_text(Glib::locale_to_utf8(text));
}


BR

_________________
evilissimo - R.I.P. dmr
< Moderator im C++/CLI Forum und im C++ Forum >
About Singletons: "Anyway, if our experts can make this mistake, you have made it and you don't even know about it."
C/C++ Forum :: FAQ - GUIs ::  gtkmm Beispiel Programm Pt. 2   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht 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.