2011-07-04 5 views
4

私はgtkmmでGtk::Imageのclicを2時間以上検出しようとしていましたが、動作させることができませんでした。それはコンパイルとexcecute罰金ですが、イベントは決してがトリガーされています。私が試したGtk :: Imageをクリックしますか?

いくつかのもの、コンパイルし、クラッシュしませんが、doens't仕事:

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内に配置し、イベントボックスのイベント信号に接続します。

信号を入力しようとしますEventBoxでイメージをラップした後のイベントボックス

+0

そうです。ありがとうございました :) – pictuga

関連する問題