2010-12-07 23 views
1

更多信息我在一個GTK創建一個GTK :: CellRendererCombo :: TreeView控件,像這樣:GTK + CellRendererCombo通行證上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中選擇它由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<>模板類將額外的參數傳遞給信號處理程序。 (對於我來說(披露:在普通的老C中有一個相當長的背景編程GTK +),這感覺很自然。但是,對於我來說,它似乎或多或少地被這些gtkmm開發者所折服。並非所有的東西都是一個子類的小部件。

+0

謝謝@unwind。我在這裏所缺少的並不是那麼多的綁定額外已知參數,而是更多地如何綁定來自事件的額外參數。在這種情況下,lotInfoCol_str(new_text)被傳入,我寧願有lotInfoCol_id(或者兩者都更好)。我可以修改on_edited信號嗎? – Mark 2010-12-15 14:22:53