2016-05-29 6 views
0

Я хочу изменить свойства окна gtk после его загрузки, для чего мне нужно будет получить доступ к объекту из другой функции, кроме main(). Для этого примера changeWidget() вызывается из main(), но я хочу связать его с кнопкой позже. Как я должен сделать «кнопки» доступными из changeWidget?Как получить доступ к объекту gtkmm из другой функции?

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

Как правило, в GTK все должно обрабатываться обратным вызовом. – oldtechaa

ответ

0

Как заявил oldtechaa, стандартный способ сделать это состоит в использовании обратного вызова. Вот пример:

(я предполагаю, что вы хотите изменить заголовок окна, потому что вы особо отметить функцию set_title)

#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); 
} 

Надеется, что это помогает.

 Смежные вопросы

  • Нет связанных вопросов^_^