2016-05-29 16 views
0

Ich möchte die Eigenschaften eines gtk-Fensters ändern, nachdem es geladen wurde, für die ich auf das Objekt von einer anderen Funktion als main() zugreifen muss. Für dieses Beispiel wird changeWidget() von main() aufgerufen, aber ich möchte es später mit einer Schaltfläche verknüpfen. Wie müsste ich "buttons" über changeWidget zugänglich machen?Wie gtkmm Objekt von anderer Funktion zugreifen?

main.cc:

#include <iostream> 
#include "buttons.h" 
#include <gtkmm/application.h> 

Buttons buttons; 

void changeWidget() 
{ 
    buttons.set_title("title"); 
} 

int main(int argc, char *argv[]) 
{ 
    Glib::RefPtr<Gtk::Application> app = 
    Gtk::Application::create(argc, argv, 
     "org.gtkmm.examples.base"); 

    changeWidget(); 

    return app->run(buttons); 
} 
+0

Im Allgemeinen in GTK sollte alles durch einen Rückruf behandelt werden. – oldtechaa

Antwort

0

Wie oldtechaa angegeben, der normale Weg, dies zu tun, ist es, einen Rückruf zu verwenden. Hier ist ein Beispiel:

(Ich gehe davon aus Sie den Fenstertitel ändern möchten, weil Sie speziell die set_title Funktion erwähnen)

#include <gtkmm.h> 

void changeWidget(Gtk::Window& window) 
{ 
    window.set_title("changeWidget Title"); 
} 

struct my_window : Gtk::Window 
{ 
    my_window() : my_button("button") 
    { 
    set_default_size(400,200); 
    set_title("Original Title"); 
    add(my_button); 

    my_button.signal_clicked(). 
     connect(sigc::mem_fun(*this, &my_window::handle_my_button_click)); 

    show_all(); 
    } 

private: 
    void handle_my_button_click() 
    { 
    // set_title("Button Changed Title"); // typically done directly, here 
    changeWidget(*this); // but you could call another function like this 
    } 

    Gtk::Button my_button; 
}; 


int main(int argc, char *argv[]) 
{ 
    Glib::RefPtr<Gtk::Application> app = 
    Gtk::Application::create(argc, argv); 

    my_window window; 

    return app->run(window); 
} 

Hoffnung, das hilft.