在gtkmm中捕捉鼠标运动

时间:2017-06-16 17:36:48

标签: c++ user-interface c++11 gtk3 gtkmm3

当我按住鼠标中键时,我试图捕捉鼠标动作。目标是在stl查看器中实现旋转功能。

我找到了事件掩码BUTTON2_MOTION_MASK。但我很难搞清楚哪个信号能够捕获它。

这是我用来创建和挂钩事件的两行。这两行都在GtkApplicationWindow构造函数中。

glWidget.add_events(Gdk::BUTTON2_MOTION_MASK);
glWidget.signal_motion_notify_event().connect(sigc::mem_fun(*this,&mainWindow::rotate));

这是我尝试连接的功能。

bool mainWindow::rotate(GdkEventMotion* motion_event)
{
    cout<<"test"<<endl;
}

我使用的方法是否正确?当我按住鼠标中键并移动鼠标时,代码没有反应。

我设法让glArea小部件以这种方式对滚动做出反应。

glWidget.add_events(Gdk::SMOOTH_SCROLL_MASK);

glWidget.signal_scroll_event().connect(sigc::mem_fun(*this,&mainWindow::zoom));

我连接的功能:

bool mainWindow::zoom(GdkEventScroll *eventScroll)
{
        cout<<"test"<<endl;
        return true;
}

1 个答案:

答案 0 :(得分:0)

我明白了。你需要添加Gdk :: Button1_MOTION_MASK和Gdk :: BUTTON_PRESS_MASK。

glWidget.add_events(Gdk::Button1_MOTION_MASK | Gdk::BUTTON_PRESS_MASK);

当点击鼠标左键并定位在小部件上时,这将捕获信号。

BUTTON2_MOTION_MASK将需要按下2个按钮。出于某种原因,它只有鼠标左键(我想要中间按钮)。