Marius: GTK+ Gui Programmierung in C++

Hey!

Ich versuche mir ein kleines GUI zu schreiben welches mir per Button verschiedene, festgelegte Shell-Befehle ausführen kann. Ich benutze dafür gtkmm 3.0.
Mein Problem ist jetzt, dass ich keine Signale von den Buttons bekomme wenn ich sie in einen Kontainer gelegt habe. Hier ist mal der erste Versuch mit einem Button der funktioniert.

  
#include <iostream>  
using namespace std;  
#include <gtkmm.h>  
  
void onStart();  
  
int main(int argc, char* argv[]){  
    Gtk::Main kit(argc, argv);  
  
    Gtk:Window window;  
    window.set_default_size(280, 170);  
    window.set_title("Control Panel");  
  
    Gtk::Button startButton("Start");  
    startButton.signal_clicked().connect(  
        sigc::ptr_fun(&onStart)  
    );  
    startButton.show();  
  
    window.add(startButton);  
  
    Gtk::Main::run(window);  
    return 0;  
}  
  
void onStart(){  
    cout << "start clicked" << endl;  
}  

Das funktioniert also. Ich clicke auf den Button und in der Konsole erscheint "start clicked".

Jetzt eine leichte Änderung. Ich benutze ein Grid-Layout und füge einen zweiten Button und einen zweiten Signal-Handler hinzu.

  
#include <iostream>  
using namespace std;  
#include <gtkmm.h>  
  
void onStart();  
void onStop();  
  
int main(int argc, char* argv[]){  
    Gtk::Main kit(argc, argv);  
  
    Gtk:Window window;  
    Gtk::Grid layout;  
  
    window.set_default_size(280, 170);  
    window.set_title("Control Panel");  
  
    Gtk::Button startButton("Start");  
    startButton.signal_clicked().connect(  
        sigc::ptr_fun(&onStart)  
    );  
  
    Gtk::Button stopButton("Stop");  
    stopButton.signal_clicked().connect(  
        sigc::ptr_fun(&onStop)  
    );  
  
    layout.attach(startButton, 0, 0, 1, 1);  
    layout.attach(stopButton, 0, 1, 1, 1);  
    layout.show_all();  
  
    window.add(layout);  
  
    Gtk::Main::run(window);  
    return 0;  
}  
  
void onStart(){  
    cout << "start clicked" << endl;  
}  
  
void onStop(){  
    cout << "stop clicked" << endl;  
}  

Jetzt kann ich die Buttons klicken so oft ich will, es erscheint keine Ausgabe mehr in der Konsole.

Das ist mein erster Versuch mit GUI-Programmierung unter Linux. Ich habe also entsprechend wenig Erfahrung mit der ganzen Sache. Kann mir bitte jemand sagen was ich falsch gemacht habe?

Danke euch!

  1. Ok, es lag daran, dass ich das Programm einmal über die Konsole und einmal vom Desktop aus gestartet habe. Wenn ich vom Desktop starte, bekommt die Konsole natürlich nichts davon mit.