C++ GTKMM:如何将键盘事件附加到绘图区域?

C++ GTKMM:如何将键盘事件附加到绘图区域?,c++,gtk,gtkmm,C++,Gtk,Gtkmm,我需要将键盘键事件附加到从DrawingArea继承的画布 我已经在我的构造函数中的“add_events”中添加了这些事件,但是运行之后,键事件没有响应,有什么问题吗 Canvas::Canvas() :m_dragDataRequestedForDrop(false), m_dropItem(nullptr),m_flag(false) { add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK |

我需要将键盘键事件附加到从DrawingArea继承的画布

我已经在我的构造函数中的“add_events”中添加了这些事件,但是运行之后,键事件没有响应,有什么问题吗

Canvas::Canvas()
:m_dragDataRequestedForDrop(false), m_dropItem(nullptr),m_flag(false)
{
    add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | 
        Gdk::POINTER_MOTION_MASK | Gdk::KEY_PRESS_MASK | 
        Gdk::KEY_RELEASE_MASK);

    set_app_paintable();
    this->set_can_focus(true);
    this->signal_key_press_event().connect(sigc::mem_fun(*this, 
        &Canvas::onDeleteKeyPress));
}


bool Canvas::onDeleteKeyPress(GdkEventKey *p_event)
{
    bool m_eventHandlerFlag = false;

    if (p_event->type == GDK_KEY_PRESS && p_event->keyval == GDK_KEY_Delete)
    {
        m_eventHandlerFlag = true;
    }
    if(m_eventHandlerFlag)
    {
        std::cout << "Holi DEL" << "\n";
        //removeActiveElements();
    }
    std::cout << "Key pressed: " << p_event->hardware_keycode
        << "\n";
    return false;
}

感谢您的帮助

您应该将GtkDrawArea放置在GtkEventBox中,然后从GtkEventBox执行所有这些操作。就我所记得的,这是因为GtkDrawArea没有这些事件。stackoverflow中的一位解释了这一点,但仅限于GtkImage。
我知道,GtkEventBox的GTKDRAW区域工作,因为我目前正在编写应用程序,它使用C应用程序,但它也适用于C++。你肯定它甚至没有进入回调吗?因为这个代码适合我。