我想通过EntryCompletion
对GTK set_match_func
功能进行模糊搜索。文档非常有限。
请注意,该代码适用于默认的EntryCompletion
。
该函数应如下所示:
fn custom_entry_completion(store: >k::EntryCompletion, text: &str, ti: >k::TreeIter) -> bool {
println!("{} // {:?}", text, ti);
true
}
我想将其嵌入如下所示:
let completion_countries = gtk::EntryCompletion::new();
completion_countries.set_match_func(custom_entry_completion);
我想进行模糊匹配,但我想我会自己处理这一部分。最有用的例子是匹配不区分大小写或匹配字符串的最后部分(或其他内容)的示例。我正在寻找一个好的例子(最好是不安全的)和/或好的文档。
所以我需要从TreeIter中获取值,并检查匹配项是否符合我的期望。因此,我的问题是如何从TreeIter中获取要与之比较的text
项。
答案 0 :(得分:1)
EntryCompletionExt::get_text_column
EntryCompletionExt::get_model
TreeModelExt::get_value
glib::value
fn custom_entry_completion(store: >k::EntryCompletion, text: &str, ti: >k::TreeIter) -> bool {
let tree_model = store.get_model().unwrap();
let text_column = store.get_text_column();
let ti_text_value = tree_model.get_value(ti, text_column);
if ti_text_value.is::<String>() {
let value = ti_text_value.get::<String>().unwrap();
println!("{:?} // {:?}", text, value);
} else {
println!("{:?} // not a string", text);
}
true
}
与entry_completion.rs示例一起使用时的控制台输出:
"adfs" // "France"
"adfs" // "Italy"
"adfs" // "Italy"
"adfs" // "Sweden"
"adfs" // "Sweden"
"adfs" // "Switzerland"
"adfs" // "Switzerland"
"adfssdf" // "France"
"adfssdf" // "Italy"
"adfssdf" // "Sweden"
"adfssdf" // "Switzerland"