鼠标按下时 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?的主要内容,如果未能解决你的问题,请参考以下文章