Anfängerfrage zu gtkmmm - oder sollte ich doch besser Ultimate++ verwenden?
-
Hallo,
ich wollte mich heute mal in die GUI Programmierung einarbeiten. Dazu hatte ich gtkmm gewählt, weil ich dazu so tolle Anleitungen (
) im Magazin gefunden habe. Ich wollte dieses einfache, mehr oder weniger abgetippte Beispiel zum laufen bringen, aber es funktioniert nur bedingt, denn es erscheinen aus irgendeinem Grund die Labels nicht!
Hier mal der Code:# include <gtkmm.h> using namespace Gtk; class MyWindow : Window { public: MyWindow(); // Der Konstruktor VBox m_vbox; HBox m_hbox; Label label1; Label label2; Label label3; }; MyWindow::MyWindow() : Window(), m_hbox(true, 20),// homogene Ausrichtung und 5 px Abstand label1("Text"), label2("Text") { // Text der Titelleiste setzen set_title("GTKmm Tutorial Teil 2"); // m_label1 der horizontalen box als erstes Element übergeben m_hbox.pack_start(label1); // m_label2 der horizontalen box als zweites Element übergeben m_hbox.pack_start(label2); // die vertikale Box an das Fenster übergeben add(m_vbox); // sorgt dafür, dass alle Widgets angezeigt werden show_all_children(); } int main (int argc, char **argv) { Main main (argc, argv); Window MyWindow; main.run(MyWindow); return 0; }
Aber nach der Compilierung erscheint nur ein leeres Fenster mit dem richtigen Titel.
Ich habe keine Ahnung was an diesem Beispiel falsch sein soll, es erscheinen auch keine Warnungen oder Fehler. Ich verwende den g++ unter Kubuntu 6.10.Da ich nach diesem "Misserfolg" schon fast gewillt bin, mir ein anderes Toolkit zu suchen wollte ich mal fragen, ob hier schon jemand Erfahrung mit Ultimate++ gemacht hat. Das lächelt mich nämlich irgendwie an, da die Codebeispiele alle recht leicht verständlich und kurz aussehen. Allerdings weiß ich nicht, welche Argumente ich an meinen Compiler übergeben muss, um ein Ultimate++ Programm zu compilieren.
Alles in Allem langweile ich wahrscheinlich nur wieder mit Einsteigerfragen, aber ich würde mich trotzdem sehr über Antworten freuen.
Danke
-
Hallo,
überleg mal genau: Die Labels packst du in eine hbox. Und die? Wo kommt die hin? Richtig, die hast du nirgends hinzugefügt. Das Programm verhält sich also völlig korrekt.
Also machst du folgendes im Konstruktor:
// m_label1 der horizontalen box als erstes Element übergeben m_hbox.pack_start(label1); // m_label2 der horizontalen box als zweites Element übergeben m_hbox.pack_start(label2); /* Wir fügen m_hbox zur m_vbox hinzu, kannst auch pack_start nehmen */ m_vbox.add(m_hbox); // die vertikale Box an das Fenster übergeben add(m_vbox); // sorgt dafür, dass alle Widgets angezeigt werden show_all_children();
MfG
GPC
-
Also ich weiß nicht, was ich falsch mach. Hier ist nochmal ein bisschen Code, der meiner Meinung nach logisch ist, aber wieder nur ein leeres Fenster erzeugt.
# include <gtkmm.h> using namespace Gtk; class MyWindow : Window { public: MyWindow(); // Der Konstruktor HBox m_hbox; Label label1; Label label2; }; MyWindow::MyWindow() : Window(), m_hbox(true, 5),// homogene Ausrichtung und 5 px Abstand label1("Hier steht was"), label2("und hier auch") { // Text der Titelleiste setzen set_title("GTKmm Tutorial Teil 2"); // label1 in die hbox m_hbox.pack_start(label1); // label2 in die hbox m_hbox.pack_start(label2); /* Und noch die m_hbox zum Window hinzufügen, * diese m_hbox ist jetzt sozusagen der "oberste" Container, den du eingefügt hast */ add(m_hbox); // sorgt dafür, dass alle Widgets angezeigt werden show_all_children(); } int main (int argc, char **argv) { Main main (argc, argv); Window MyWindow; main.run(MyWindow); return 0; }
Was ist überhaupt der Unterschied zwischen pack_start und pack_end?
Desweiteren würden mich noch ein paar Meinungen zu Ultimate++ interessieren.
Danke
-
2 Fehler:
Nr. 1 (weshalb nichts angezeigt wird):
int main (int argc, char **argv) { Main main (argc, argv); MyWindow win; // Muss so heißen. Und nicht Window! Sonst wird Gtk::Window verwendet! main.run(win); return 0; }
Mit alleine dieser Änderung lässt sich das Programm aber nicht mehr kompilieren. Daher musst du
class MyWindow : public Window
schreiben. Jetzt sollte es laufen.
Von Ultimate++ hab' ich keinen Plan - wozu auch, gibt doch Gtk
-
Danke plusman, jetzt gehts endlich!
-
Also wenn du gtkmm schon zum laufen bekommen hast, sehe ich keinen Grund U++ zu verwenden. Bzw. wenn du eh Linuxer bist, ist gtkmm von Haus aus richtig. Würdest du unter Windows programmieren, wäre U++ eine Option. Wenn auch dieses einen leider von der U++ TheIDE abhängig macht. U++ ist irgendwie so ein merkwürdiger Kandidat. Es funktioniert, erfüllt seinen Zweck sehr gut, aber man muß TheIDE benutzen.
Bleib also bei gtkmm.