锈蚀及;GTK&x2B;3.如何创建包含几个glib::Value类型元素的数组,这些元素可以强制转换为&;[&;ToValue]类型?
我正在为GTK+3(称为GTK rs或Rust gnome)使用Rust和绑定创建GUI应用程序。我想使用方法将一些数据插入锈蚀及;GTK&x2B;3.如何创建包含几个glib::Value类型元素的数组,这些元素可以强制转换为&;[&;ToValue]类型?,gtk,rust,gtk3,glib,rust-gnome,Gtk,Rust,Gtk3,Glib,Rust Gnome,我正在为GTK+3(称为GTK rs或Rust gnome)使用Rust和绑定创建GUI应用程序。我想使用方法将一些数据插入gtk::ListStore(GtkListStore) 工作样本,但只有一列: 如果我有一列,我可以插入数据: let type_of_a_column = &[gtk::Type::U32]; let data_for_column_1 = (2 as u32).to_value(); let model_list_of_data = ListStore::ne
gtk::ListStore
(GtkListStore
)
工作样本,但只有一列:
如果我有一列,我可以插入数据:
let type_of_a_column = &[gtk::Type::U32];
let data_for_column_1 = (2 as u32).to_value();
let model_list_of_data = ListStore::new(type_of_a_column);
model_list_of_data.insert_with_values(None, &[0 as u32], &[&data_for_column_1]);
然而,如果我有更多的列,我不知道如何移交更多的数据。
我知道它应该在内部调用
所以我可能需要一个数组或切片,但如果我执行以下操作:
希望在数组中传递两个元素,但不起作用
let type_of_a_column = &[gtk::Type::U32, gtk::Type::I64];
let data_for_column_1 = (2 as u32).to_value();
let data_for_column_2 = (4 as i64).to_value();
let array_of_data = [&data_for_column_1, &data_for_column_2];
let model_list_of_data = ListStore::new(type_of_a_column);
model_list_of_data.insert_with_values(None, &[1 as u32], &[&array_of_data]);
它在编译过程中给了我:
错误:特性绑定的[&glib::Value;2]:glib::IsA
为
不满意[E0277]
我不知道如何克服它
不工作的MCVE
梅因
货舱
最终,你很可能会想写这样的东西:
model_list_of_data.insert_with_values(Some(0), &[0, 1], &[&2u32, &4i64]);
让我们稍微分解一下函数定义:
fn insert_with_values(&self,
position: Option<u32>,
columns: &[u32],
values: &[&ToValue])
-> TreeIter;
看一看,我们可以看到它是为原始整数类型实现的
由于u32
和i64
实现了SetValue
,它们也实现了ToValue
。对数字的引用也可以隐式强制为对特征的引用
进行此更改后,将显示窗口,但
你必须从这里找出GTK的奥秘 如果您的主文件是
src/main.rs
,您也不需要指定[[bin]]]
节,这是常规位置。@Shepmaster更改为“&array\u of_data”,编译器抱怨:预期的&[>k::ToValue],发现的&[>k::Value;2](预期的片,发现的2个元素数组)[E0308]
——更改为“&array_of_data[…]”,编译器抱怨:预期的
&[>k::ToValue],发现的&[>k::Value](预期的特质gtk::ToValue,发现的结构gtk::Value
)[E0308]`--更改为“&[&array_of_data[…]”,编译器抱怨:错误:特质绑定的
[>k::Value]:std::marker::Sized`不满足[E0277]注意:[>k::Value]
在编译时没有已知的常量大小`它已成功编译:d注意gtk::init().expect(“未能初始化gtk”);
更短更好-它打印底层错误消息。
model_list_of_data.insert_with_values(Some(0), &[0, 1], &[&2u32, &4i64]);
fn insert_with_values(&self,
position: Option<u32>,
columns: &[u32],
values: &[&ToValue])
-> TreeIter;
impl<T> ToValue for Option<T> where T: SetValueOptional
impl<T> ToValue for T where T: SetValue + ?Sized
impl ToValue for Value