2010-11-03 12 views
0

我正在編寫我的第一個gtk程序,使用gtkmm和glade。 我做了一個filechooserbutton,它有一個叫做文件集 的信號所以我將它設置爲我選擇文件時要調用的函數名稱。 但後來我在這裏看到: http://library.gnome.org/devel/gtkmm-tutorial/unstable/sec-builder-accessing-widgets.html.en當我在glade中指定函數名稱時,是否必須手動附加gtk信號處理程序?

,他們是手工獲取對話框控件並設置代碼中的一個按鈕,信號處理程序。 哪種方法可以做到這一點?

雖然我在這裏任何指向好例子的鏈接都很方便,但它們似乎並不多見。謝謝。

回答

0

這是我做的:

// create the UI 
refUI = Gtk::Builder::create(); 
refUI->add_from_file(grq::GLADE_FILE); 

// grab your widget 
refUI->get_widget("but_new", but_new); // Gtk::ToolButton *but_new; 
but_new->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::on_new_game)); 

// your signal handler looks something like this :) 
void MainWindow::on_new_game() {} 

編輯:

基本上*這是你會被調用函數信號處理程序的對象。

這是我的主要看上去像什麼:

int main(int argc, char **argv) { 

    Gtk::Main  kit(argc, argv); 
    MainWindow  main_window; 

    kit.run(*main_window.window); 

    return 0; 
} 

MainWindow基本上是一個包裝的GtkWindow並定義窗口小部件,一個一類。 la:

class MainWindow 
{ 

private: 
Glib::RefPtr<Gtk::Builder> refUI; 

// 
// Widgets 
// 

Gtk::ToolButton *but_about; 

public: 

// The window. This is public so we can hook into events and 
// call kit.run(window) against it, if needed. 
Gtk::Window *window; 


MainWindow() 
{ 
    // Load the data for this window and it's widgets. 
    refUI = Gtk::Builder::create(); 
    refUI->add_from_file(grq::GLADE_FILE); 


    // The window 
    refUI->get_widget("main_window", window); 


    // Widgets    
    refUI->get_widget("but_about", but_about); 
    but_about->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::on_about)); 

      ... 

} 


virtual ~MainWindow() 
{ 
    if (window != NULL) 
    { 
     delete window; // Frees all the children for the window, too. 
    } 
} 

    virtual void on_about() 
    { 
      // stuff 
    } 

}; 

希望這會有所幫助!

+0

http://library.gnome.org/devel/gtkmm-tutorial/unstable/sec-signals-overview.html.en雖然知道要連接的信號也不是微不足道的:S – 2010-11-27 16:20:44

+0

對,我見過在很多地方......我沒有得到的是這個部分。 – stu 2010-11-29 01:29:58

+0

在這種情況下,'這'是什麼? – stu 2010-11-29 01:30:16

0

我發現了我的問題的答案,作爲另一個stackoverflow問題的事後補充。

但我不記得它是哪一個。

答案似乎是,你必須以編程方式將信號處理程序添加到代碼中的小部件,gtkbuilder不會爲你做。

相關問題