如何从树视图的选择中删除/擦除行
How to remove/erase rows from a selection of a tree view
我想从树视图或底层模型中删除选定的行。
下面的代码很有效,但我不知道我必须调用哪个类的哪个函数来删除所选的元素。
std::vector<Gtk::TreeModel::Path> pathlist;
pathlist = get_selection()->get_selected_rows();
for ( std::vector<Gtk::TreeModel::Path>::iterator it = pathlist.begin(); it!=pathlist.end(); it++)
{
Gtk::TreeModel::iterator iter = get_model()->get_iter( *it );
Gtk::TreeModel::Row row = *iter;
int val;
std::string str;
row.get_value( 0, val );
row.get_value( 1, str );
std::cout << "val " << val << std::endl;
std::cout << "String:" << str << std::endl;
}
上面的代码运行良好。
现在我想删除已选定的元素!注意:多选已激活。
我知道主要问题是多重选择-如果你只得到一个项目,那么很简单:
get_model()->erase(iter);
问题就在那之后;其余迭代器将变为无效。
每一行都有唯一的ID吗?如果是,那么你可以使用:
- 将所有ID存储在容器中
- 浏览所有项目并删除存储的
类似的东西:
std::vector<Gtk::TreeModel::Path> pathlist;
pathlist = get_selection()->get_selected_rows();
std::set<int> IDs;
for ( std::vector<Gtk::TreeModel::Path>::iterator it = pathlist.begin(); it!=pathlist.end(); it++)
{
Gtk::TreeModel::iterator iter = get_model()->get_iter( *it );
iter->get_value(ID, id);
IDs.insert(id);
}
auto iter = get_model()->erase( get_model()->get_iter( *pathlist.begin() );
while (iter)
{
int id;
iter->get_value(ID, id);
if (IDs.find(id) != IDs.end()) {
iter = get_model()->erase( iter );
else
++iter;
}
或者类似的东西。对不起,我不记得整个API了。
我假设从模型中删除行也会更改PATH。
相关文章:
- C++14 中unordered_map矢量和擦除删除成语的奇怪行为
- 擦除是否删除 stl 无序列图元素使用的堆内存
- 当我不关心顺序并且没有重复项时,更快的擦除删除成语?
- 如何使用擦除和迭代器来删除二维向量中的项目
- 擦除删除成语的性能增益从何而来
- 矢量擦除错误,无法删除不完整的类型
- 为什么擦除+删除比删除更有效
- 如何根据某些值擦除/删除类对象的向量
- 为什么擦除-删除成语不适用于反向迭代器
- 无法使用"擦除"函数从 c++ 字符串中删除数字
- C++擦除-删除类型推断失败
- 擦除remove_if成语 - 删除了什么吗?
- 删除矢量的尾部(通过擦除)内存是否有效
- 删除[]是否可以与通用数组正常使用?如果是这样,为什么使用std :: vector ::擦除它会导致释放内存的错误
- 无法使用擦除方法删除矢量的最后一个元素
- 如何通过长度从 std::vector 中删除元素<string>(擦除不起作用)
- 使用擦除-删除范例将元素从一个向量移动到另一个向量
- 在维护顺序的同时从std::vector中删除/擦除重复元素的方法
- 如何从树视图的选择中删除/擦除行
- 从标准::列表中删除/擦除