我想从树视图或基础模型中删除选定的行。
以下代码剪辑有效,但我不知道我必须调用哪个类来删除所选元素。
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;
}
上面的代码工作正常。
现在我要删除所选的元素! 注意:激活MULTIPLE选择。
答案 0 :(得分:0)
据我所知,主要问题是MULTIPLE选择 - 如果只有一个项目,那么它很简单:
get_model()->erase(iter);
问题出在那之后;其余的迭代器变得无效。
每行是否有任何唯一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。