我在Gtk :: TreeView中创建一个Gtk :: CellRendererCombo,如下所示:

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组合中选择时,它由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)?

谢谢。

最佳答案

gtkmm文档中的This page显示了如何使用sigc::bind<>模板类将额外的参数传递给信号处理程序。

gtkmm开发人员似乎对此不屑一顾,但是对我而言(公开:使用普通的老式C进行相当长的GTK +后台编程),感觉很自然。并非所有内容都是子类化的小部件。

10-05 19:03