You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在gtk-rs中获取CompositeTemplate的父类gtk::TreeView实例?

获取gtk-rs子类中父类TreeView的引用

在你的impl GnoteTreeView代码块中(这里的GnoteTreeView是对应type Type = super::GnoteTreeView的公共对象类型),有两种方式获取父类gtk::TreeView的引用:

1. 直接使用self调用父类方法

由于你的公共GnoteTreeView类型继承自gtk::TreeView,它自动拥有父类的所有方法,无需额外转换即可直接调用:

impl GnoteTreeView {
    pub fn configure_tree_view(&self) {
        // 直接调用TreeView的方法
        self.set_headers_visible(true);
        self.set_search_column(0);
    }
}

2. 显式转换为父类引用

如果需要明确获取&gtk::TreeView类型的引用(比如需要传递给要求父类类型的函数),可以使用glib::ObjectExt提供的upcast_ref方法:

impl GnoteTreeView {
    pub fn get_tree_view_ref(&self) -> &gtk::TreeView {
        // 显式转换为父类引用
        self.upcast_ref::<gtk::TreeView>()
    }

    pub fn expand_all_items(&self) {
        let tree_view = self.upcast_ref::<gtk::TreeView>();
        tree_view.expand_all();
    }
}

注意点

  • self.imp()获取的是你定义的内部子类结构体实例(包含tree_store和各个Cell字段的那个结构体),并非父类TreeView的引用,不要混淆两者的用途。
  • upcast_ref方法会自动处理类型转换,因为你的GnoteTreeView已经在ObjectSubclass中声明了ParentType = gtk::TreeView,类型安全有保障。

内容的提问来源于stack exchange,提问作者Bill Payne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:04:55