鼠标按下时 Gtk::Widget on_enter_notify?

Posted

技术标签:

【中文标题】鼠标按下时 Gtk::Widget on_enter_notify?【英文标题】:Gtk::Widget on_enter_notify when mouse is down? 【发布时间】:2011-09-29 14:34:19 【问题描述】:

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

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

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

任何帮助或建议将不胜感激。

【问题讨论】:

也许你应该通过组合按钮按下事件/按钮释放事件来处理高亮。 @erick2red 这就是我最初的方式。拖动事件仍在启动,我无法突出显示其他单元格。 那么,看看[GtkButton代码] (git.gnome.org/browse/gtk+/tree/gtk/gtkbutton.c) 我在找什么?我已经扩展了 Gtk::Layout 所以我可以有几个标签和一个图像,所以我认为按钮代码对我正在做的事情没有任何影响。我认为必须有一种方法可以禁用“begin_drag”事件的触发,或者完全不同的方法。 【参考方案1】:

好的,显然当一个小部件被激活或点击时,GdkDevice 'grab() 的小部件并且只向那个小部件发送事件。所以我从事件中取出了设备,并在它上面调用了“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;

【讨论】:

以上是关于鼠标按下时 Gtk::Widget on_enter_notify?的主要内容,如果未能解决你的问题,请参考以下文章

鼠标按下时的 JavaScript

使 Pyqt 按钮在鼠标按下而不是鼠标按下时运行功能

鼠标按下时CSS光标更改不起作用

在鼠标按下时获取屏幕像素

Twitter Bootstrap 工具提示:鼠标按下时闪烁

如何在鼠标左键按下时触发循环 autoclicker c++