GtkEventBox将信号连接到Glade中的GAction

时间:2019-01-10 09:25:03

标签: rust gtk glade

我正在尝试通过Glade将GtkEventBox的enter-notify-event连接到附加的GAction。使用GtkInspector检查正在运行的应用程序,发现没有任何连接到enter-notify-event信号。

我正在关注this blog post,其中指出:

  

您还可以通过.ui文件设置属性。当您将点击的事件处理程序替换为操作时,便可以真正简化代码库。

所以我认为这应该是可行的。它只提到了GtkButton的点击处理程序,但是我不明白为什么它与其他信号应该有所不同。

glade:

glade

检查员:

inspector

<object class="GtkEventBox" id="service_row">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <signal name="enter-notify-event" handler="test.show-arrow" swapped="no"/>

complete UI file

let actions = SimpleActionGroup::new();
let show_arrow = SimpleAction::new("show-arrow", None);
actions.add_action(&show_arrow);
show_arrow.connect_activate(move |_action, _data| {
   println!("enter row2");
});
row.insert_action_group("test", &actions);
// row.connect_enter_notify_event(move |_widget, _crossing| {
//     actions.activate_action("show-arrow", None);
//     Inhibit(false)
// });

通过像在推荐的行中的代码手动激活GAction可以正常工作。当查看EventBox时,操作也会显示在检查器中。

非常感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

我认为您无法做到。 GtkActionable仅适用于具有明确的用户激活操作的小部件,例如按钮或菜单项。特别是GtkEventBox没有实现它。

即使这样做,该界面也只能管理每个类一个事件,即 activate 操作,而不管理您感兴趣的enter-notify-event

所以,恐怕您将不得不继续手动连接事件。