2011-07-04 48 views
4

我一直在嘗試使用gtkmm在Gtk::Image上檢測clic超過2個小時,但是我無法完成它的工作。它確實編譯並且很好,但事件是從未觸發過檢測點擊Gtk :: Image?

有些東西我試過了,可以編譯,不會崩潰,但好好嘗試一下工作:

m_image = manage(new Gtk::Image(Gtk::Stock::APPLY, Gtk::ICON_SIZE_BUTTON)); 
m_image->add_events(Gdk::ALL_EVENTS_MASK); 
m_hbox->pack_start(*m_image, Gtk::PACK_SHRINK); 

m_image->signal_button_release_event() 
    .connect(sigc::hide(sigc::mem_fun(*this, &Todo::switchStatus))); 

m_image->show(); 

#include <gtkmm/main.h> 
#include <gtkmm/window.h> 
#include <gtkmm/button.h> 
#include <gtkmm/stock.h> 
#include <gtkmm/image.h> 

#include <iostream> 

using namespace std; 

class Win : public Gtk::Window 
{ 
    public: 
     Win(); 
     bool link(GdkEventButton* e); 

    private: 
     Gtk::Image image; 
}; 

Win::Win() 
    : image(Gtk::Stock::APPLY, Gtk::ICON_SIZE_BUTTON) 
{ 
    cerr << "created" << endl; 

    image.add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK); 
    image.signal_button_release_event().connect(sigc::mem_fun(*this, &Win::link)); 
    image.show(); 

    add(image); 
} 

bool Win::link(GdkEventButton* e) 
{ 
    cerr << "kuh" << endl; 
} 

int main(int argc, char *argv[]) 
{ 
    Gtk::Main app(argc, argv); 

    Gtk::Window window; 
    window.resize(300, 500); 

    Win win; 

    Gtk::Main::run(win); 

    return 0; 
} 

好了,我不知道我還能道... 有什麼想法? :)

在此先感謝。

回答

5

http://developer.gnome.org/gtkmm/unstable/classGtk_1_1Image.html

的Gtk ::圖像是一個「無窗」窗口小部件(已沒有GDK ::它自己的窗口),因此默認情況下不接收事件。如果你想接收圖像的事件,如按鈕點擊,把一個GTK ::事件盒裏面的圖像,然後連接到事件信號的事件框

所以我想嘗試把信號上用EventBox封裝圖像後的事件框。

+0

沒錯。謝謝 :) – pictuga