繁体   English   中英

如何在 gtk4-rs 中使用鼠标按钮事件?

[英]How do I use mouse button events with gtk4-rs?

我正在尝试使用 Rust 和 gtk4-rs 在我的应用程序中的 TreeView 上捕获右键单击事件。 我没有看到鼠标按钮事件的特定 EventController。 我确实看到了 EventControllers 用于键盘按下运动事件之类的事情。 我最终使用了 EventControllerLegacy 并且只检测了闭包内的事件类型,但我觉得我在这里遗漏了一些东西。 还有其他方法我应该从鼠标获取按钮按下事件吗? 这是我的代码:

pub fn build_tree_view() -> TreeView {
    let tree_view: TreeView = TreeView::new();
    tree_view.set_headers_visible(false);
    let event_controller = EventControllerLegacy::new();
    event_controller.connect_event(|controller, event| {
        if event.event_type() == ButtonPress {
            let button_event = event.clone().downcast::<ButtonEvent>().unwrap();
            if button_event.button() == GDK_BUTTON_SECONDARY as u32 {
                println!("got mouse button: {}", button_event.button());
            }

        }
        return Inhibit(false);
    });
    tree_view.add_controller(&event_controller);
    return tree_view;
}

我认为我遗漏了什么的原因是 EventControllerLegacy 的文档说明了以下内容:

EventControllerLegacy 是一个事件 controller,它提供对事件 stream 的原始访问。 只有在其他事件控制器或手势都没有完成这项工作时,才应将其用作最后的手段。

我正在使用 Rust 1.56.0 和 gtk4-rs 0.4.2

谢谢

如果您查看示例,通常在这种情况下使用gtk::GestureClick 要检测右键单击,您可以像这样使用它:

pub fn build_tree_view() -> TreeView {
    let tree_view: TreeView = TreeView::new();
    tree_view.set_headers_visible(false);

    // Create a click gesture
    let gesture = gtk::GestureClick::new();

    // Set the gestures button to the right mouse button (=3)
    gesture.set_button(gtk::gdk::ffi::GDK_BUTTON_SECONDARY as u32);

    // Assign your handler to an event of the gesture (e.g. the `pressed` event)
    gesture.connect_pressed(|gesture, _, _, _| {
        gesture.set_state(gtk::EventSequenceState::Claimed);
        println!("TreeView: Right mouse button pressed!");
    });

    // Assign the gesture to the treeview
    tree_view.add_controller(&gesture);
    return tree_view;
}

注意:示例适用于 Rust 1.58 和 gtk4 0.4.4,但差异应该很小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM