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

标签 c++ gtk gtkmm

我需要将一个键盘按键事件附加到继承自 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;
}

感谢您的帮助

最佳答案

您应该将 GtkDrawArea 放入 GtkEventBox 中,然后从 GtkEventBox 中执行所有操作。据我记得,发生这种情况是因为 GtkDrawArea 没有这些事件。 stackoverflow 中的一篇解释了这一点,但仅限于 GtkImage。 我知道,GtkEventBox 中的 GtkDrawArea 可以工作,因为我目前正在编写使用它的应用程序(应用程序是用 c 编写的,但它也应该适用于 c++)。

关于c++ - GTKMM:如何将键盘事件附加到绘图区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52171141/

相关文章:

c++ - OpenMP 并行代码运行速度较慢

c++ - Dijkstra 的算法 openmp 奇怪的行为

linux - 无法为 Linux 构建和安装 Geary

c++ - 编译问题 sigc++/gtkmm in own namespaces

c++ - ARC 在 Objective-C++ 中不起作用

java - 将 std::unique_ptr 传递给 JNI

javascript - SyntaxError 无效字符 '\u8220'

c++ - 是否有用于 C++/GTK 的 GUI 设计器?

c++ - 在 gtkmm 中显示 opencv cv::Mat 图像

c++ - Gtkmm 程序编译正常但崩溃 - Windows XP