gtkmm 中树视图选择回调的签名和功能
Posted
技术标签:
【中文标题】gtkmm 中树视图选择回调的签名和功能【英文标题】:signature and functionality of selection callback of treeview in gtkmm 【发布时间】:2014-08-27 12:50:07 【问题描述】:我有一个树视图,希望在选择更改时得到通知。回调的签名是什么?
我找到了一个类似sn-p的代码:
Gtk::TreeView *treeview = Gtk::manage(new Gtk::TreeView);
Glib::RefPtr< Gtk::TreeSelection > sel = treeview->get_selection();
sel->set_mode( Gtk::SELECTION_MULTIPLE );
sel->set_select_function(sigc::ptr_fun(&SelFun));
但我找不到关于 SelFun 的任何信息!
签名怎么样 如何找出该函数中选择了哪些行和列? 如何使用该对象访问模型中的数据是的,我实际上不知道 TreeView/Model/Path/Selection 是如何交互的。非常欢迎每个示例链接!
【问题讨论】:
【参考方案1】:您似乎想要多选。我也有同样的问题。一旦启用了多重选择,获取选定的行就有点困难了。获取方式略有不同。
我将提供最通用的方法。首先,您需要在启用多项选择后重载 signal_changed() 信号。然后,将 TreeView 的 TreeSelection 分配给 RefPtr 以便于访问。
Glib::RefPtr<Gtk::TreeSelection> TreeView_TreeSelection;
TreeView_TreeSelection = your_TreeView.get_selection();
接下来,将 TreeSelection 连接到 signal_changed() 信号。
TreeView_TreeSelection -> signal_changed().connect(sigc::mem_fun(your_TreeView,
&your_Class::on_selection_changed));
现在,确保在名为 on_selction_changed() 的“your_Class”中创建一个 void 函数头或任何您想要的。只需确保将上面连接中的名称更改为您的班级名称即可。 最后一步是制作函数。这是一个简单的示例,它获取所选行的所有 TreePaths 的向量,然后将这些 TreePaths 转换为 TreeModel::Row 指针的向量。
void your_Class::on_selection_changed()
if((TreeView_TreeSelection -> count_selected_rows()) == 0)
return;
vector<Gtk::TreeModel::Path> selected_rows = TreeView_TreeSelection -> get_selected_rows();
vector<Gtk::TreeModel::Row*> selected_TreeRows;
vector<Gtk::TreeModel::Path>::iterator TreePath_iterator = selected_rows.begin();
Gtk::TreeRow *row;
while(TreePath_iterator != selected_rows.end()
selected_row_it = p_TreeModel -> get_iter(TreePath_iterator);
row = (*selected_row_it);
selected_TreeRows.push_back(row);
TreePath_iterator++;
您知道如何使用类似于 STL 的包含 API(称为 TreeModel 的 children())来遍历 TreeModel?它对于遍历 TreeModel 的所有行或获取 TreeModel 的大小(AKA 行数)最有用。它的使用取决于您使用的是 ListStore、TreeStore 还是自定义 TreeModel。
【讨论】:
抱歉,无法编译您的代码。我缺少:p_TreeModel 定义和初始化以及 selected_row_it 定义和初始化。我对树、树视图、行、树行、树行迭代器完全感到困惑……哇!仅从选择中获取数据.... :-) 对不起。 p_TreeModel 应该只是一个 Gtk::ListStore,我假设你正在使用它。每个 TreeView 都必须使用 TreeModel。它是保存 TreeView 数据的东西。我建议使用本指南来了解如何使用 TreeView。您需要从 Gtk::TreeView 派生您的类,如下面的指南详细信息。明天有空我会改进这个例子https://developer.gnome.org/gtkmm-tutorial/unstable/chapter-treeview.html.en以上是关于gtkmm 中树视图选择回调的签名和功能的主要内容,如果未能解决你的问题,请参考以下文章
将 css 样式应用于 Gtk::ToolButton 不适用于 gtkmm 中的选择器
签约“Runner”需要开发团队。在签名和功能编辑器中选择一个开发团队
Gtkmm3 TreeView ListStore.Clear 或 TreeSelection.unselectAll 导致错误