c++ - 鼠标按下时 Gtk::Widget on_enter_notify?

标签 c++ c gtk gtkmm

我想要一个 Gtk::Widgets 的列表,当点击它时我需要突出显示小部件,但是当用户按住按钮并拖动到另一个小部件时,第一个将“取消突出显示”并且新的将在 enter_notify 上突出显示。

我试过在多个组合中使用 on_enter_notify_event 和 on_button_press_event(是的,我正在添加事件),但每次我“按下”小部件时,它都会启动拖动事件,而 enter_notify 和 leave_notify 不会火。

有没有办法忽略拖动事件?我试过在它开始时结束它,但我认为问题是 on_notify 不会在鼠标按下时触发。还有其他方法吗?

如有任何帮助或建议,我们将不胜感激。

最佳答案

好吧,显然当一个小部件被激活或点击时,GdkDevice 会“抓取()”这个小部件并且只向那个小部件发送事件。所以我从事件中获取了设备,并在其上调用了“ungrab()”,以便它允许其他单元格接收事件。然后在我的其他单元格上检查 on_enter_notify_event 中的 event->state 以查看鼠标是否按下,瞧!该单元格突出显示。

bool cell::on_button_press_event(GdkEventButton* event) {
  highlight_cell();

  gdk_device_ungrab(event->device, event->time);

  return true;
}

关于c++ - 鼠标按下时 Gtk::Widget on_enter_notify?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7598923/

相关文章:

c++ - 如何找出代码的哪些部分创建了最多的虚拟内存?

c - 从 char 中提取 char。例如 1 from 123

python - 调用 gtk.main 后执行函数

haskell - 安装 gtk2hs

c++ - 使用 Cmake 移动 .gcda 文件

c++ - C++ std::vector of array 的编译器错误

c++ - 使用模板元编程构建编译时命令查找表

c - 内核模块中缺少键盘中断

c - 如何获取变量地址的地址(&& 是编译器错误)?

python - time .sleep() 在命令中以错误的顺序发生;总是在函数的开头