gpt4 book ai didi

c++ - GTK+ CellRendererCombo Pass 关于 signal_edited 的更多信息

转载 作者:太空宇宙 更新时间:2023-11-04 14:25:21 25 4
gpt4 key购买 nike

我像这样在 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 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) 吗?

谢谢。

最佳答案

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

gtkmm 开发人员似乎或多或少不喜欢它,但对我来说(披露:使用普通旧 C 进行 GTK+ 编程的背景相当长)感觉很自然。并非所有东西都是子类小部件。

关于c++ - GTK+ CellRendererCombo Pass 关于 signal_edited 的更多信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4382808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com