2010-12-07 2 views
1

создать Gtk :: CellRendererCombo в Gtk :: TreeView так:GTK + CellRendererCombo Pass Дополнительная информация о signal_edited

Gtk::CellRendererCombo *someRenderer = manage(new Gtk::CellRendererCombo()); 
someRenderer->property_has_entry() = false; 
someRenderer->property_text_column() = 0; 
someRenderer->property_editable() = true; 
someRenderer->property_model() = m_someListStore; 
someRenderer->signal_edited().connect(sigc::mem_fun(*this, &SomeClass::onEdited)); 
col = manage(new Gtk::TreeViewColumn(_("Some Column Name"),*someRenderer)); 

Где соответствующий список магазин "m_someListStore" создается как:

{ 
Gtk::TreeModel::ColumnRecord colRec; 
colRec.add(someList_str); 
colRec.add(someList_id); 
m_someListStore = Gtk::ListStore::create(colRec); 
} 

Gtk::TreeModel::iterator itr1 = m_someListStore->append(); 
(*itr1)[lotInfoCol_id] = 0; 
(*itr1)[lotInfoCol_str] = "Zero"; 
itr1 = m_someListStore->append(); 
(*itr1)[lotInfoCol_id] = 1; 
(*itr1)[lotInfoCol_str] = "One"; 
etc... 

Моя проблема в том, когда я выбираю из CellRenderer Combo, это get обрабатывается методом SomeClass :: onEdited.

void SomeClass::onEdited(const Glib::ustring& path_string, const Glib::ustring& new_text) 
{ 
    Gtk::TreePath path(path_string); 
    Gtk::TreeModel::iterator iter = m_TreeViewListStore->get_iter(path); 
    if(iter) 
    { 
    Gtk::TreeRow row = *iter; 
    row[m_TreeViewModel.some_column] = new_text; 
    } 
} 

new_text содержит выбранное строковое значение в моем CellRendererCombo (someList_str). Есть ли способ, который я могу передать в int id (someList_id)?

Спасибо.

ответ

0

This page из документации gtkmm показывает, как использовать класс шаблона sigc::bind<> для передачи дополнительных параметров обработчику сигнала.

Похоже, что разработчики gtkmm более или менее нахмурились, но для меня (раскрытие: с довольно длинным фоновым программированием GTK + в обычном старом C) это кажется вполне естественным. Не все является подклассом виджета.

+0

Спасибо @unwind. То, что мне не хватает здесь, - это не столько привязка дополнительных параметров, сколько больше привязки дополнительных параметров из события. В этом случае передается lotInfoCol_str (new_text), где я предпочитаю иметь lotInfoCol_id (или даже лучше оба из них). Могу ли я изменить сигнал on_edited? – Mark 2010-12-15 14:22:53

Смежные вопросы