2017-05-29 2 views
1

Ich versuche, ein ComboBox, vor allem das Modell für sie zu schaffen:Wie konvertieren wir eine Rust String in einem gtk :: type :: String?

let type_in_col = &[gtk::Type::String]; 
let list_model = ListStore::new(type_in_col); 
list_model.insert_with_values(None, &[0], &[""]); 
list_model.insert_with_values(None, &[0], &["h"]); 
list_model.insert_with_values(None, &[0], &["H"]); 
list_model.insert_with_values(None, &[0], &["W"]); 
list_model.insert_with_values(None, &[0], &["S"]); 

Dieses Stück Code hat mir diesen Fehler:

error[E0277]: the trait bound `str: std::marker::Sized` is not satisfied 
--> src\widgets\daywidget.rs:36:1 
    | 
36 | #[widget] 
    | ^^^^^^^^^ `str` does not have a constant size known at compile-time 
    | 
= help: the trait `std::marker::Sized` is not implemented for `str` 
= note: required for the cast to the object type `gtk::ToValue` 

(der Fehler ist nicht sehr genau, weil ich m mit Relm)

+3

Nur eine Vermutung, aber Sie könnten 'String' statt' str' wollen. Sie können 'str' zu' String' mit ' "Beispiel" .to_string()' konvertieren. –

+1

ich es geschafft, ein Beispiel zu finden, die 'list_model.insert_with_values ​​tut (None, & [0], und [& ("S" .to_value()) als & ToValue]);' –

+1

Sie sollten das als eine Antwort gibt! –

Antwort

1

Sie möchten die folgenden verwenden, statt:

let type_in_col = &[gtk::Type::String]; 
let list_model = ListStore::new(type_in_col); 
list_model.insert_with_values(None, &[0], &[&""]); 
list_model.insert_with_values(None, &[0], &[&"h"]); 
list_model.insert_with_values(None, &[0], &[&"H"]); 
list_model.insert_with_values(None, &[0], &[&"W"]); 
list_model.insert_with_values(None, &[0], &[&"S"]); 

seit SetValue für &T where T: ?Sized umgesetzt.

Sie können von &str zu &ToValue nicht gießen: siehe here aus den Gründen.

+0

'Diese Funktion nimmt vier Parameter aber drei Parameter wurden geliefert (erwartet 4 Parameter) [E0061] [4 mal]' im 'None's – Zelphir

+1

@Zelphir: Sie verwenden wahrscheinlich eine' TreeStore' anstelle eines 'ListStore' . Die erstere muss auch einen Elternteil angeben, der "None" sein kann. – antoyo

+0

richtig, danke. – Zelphir