我需要将一个键盘按键事件附加到从DrawingArea继承的Canvas上。
我已经在构造函数的'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;
}
感谢您的帮助
答案 0 :(得分:0)
您应该将GtkDrawArea放在GtkEventBox中,然后执行GtkEventBox中的所有操作。据我所记得,这是因为没有针对GtkDrawArea的这些事件而发生的。 stackoverflow中的一个解释了这一点,但仅限于GtkImage。 我知道,GtkEventBox中的GtkDrawArea可以工作,因为我当前正在编写使用它的应用程序(该应用程序在c中,但它也应适用于c ++)。