2016-05-29 19 views
0

ロードされたgtkウィンドウのプロパティを変更したいのですが、main()以外の関数からオブジェクトにアクセスする必要があります。この例では、main()からchangeWidget()が呼び出されていますが、後でボタンにリンクしたいと思います。 changeWidgetから「ボタン」にアクセスできるようにするにはどうすればよいですか?他の関数からgtkmmオブジェクトにアクセスするには?

main.cc:oldtechaaで述べたように

#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

、これを行うための標準的な方法は、コールバックを使用することです。 ここでは例です:

(私はあなたが、具体的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); 
} 

・ホープ、このことができます。

関連する問題