如何在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. 显式转换为父类引用
如果需要明确获取>k::TreeView类型的引用(比如需要传递给要求父类类型的函数),可以使用glib::ObjectExt提供的upcast_ref方法:
impl GnoteTreeView { pub fn get_tree_view_ref(&self) -> >k::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
相关产品推荐
相关产品推荐

