Ruby 如何编辑TreeModelFilters子模型?
我目前正在尝试根据文本框的输入过滤Ruby 如何编辑TreeModelFilters子模型?,ruby,gtk2,Ruby,Gtk2,我目前正在尝试根据文本框的输入过滤TreeView,同时仍然允许用户编辑TreeView的单元格 我遇到的问题是,在使用TreeModelFilter时,无法将TreeView上的编辑转换为子模型(即ListStore上的编辑 单元格(cellRenderText)编辑的信号连接如下所示: renderer.signal_connect('edited') do |w, s1, s2| cell_edited(s1, s2, treeview, $status) end def cel
TreeView
,同时仍然允许用户编辑TreeView
的单元格
我遇到的问题是,在使用TreeModelFilter
时,无法将TreeView
上的编辑转换为子模型(即ListStore
上的编辑
单元格(cellRenderText
)编辑的信号连接如下所示:
renderer.signal_connect('edited') do |w, s1, s2|
cell_edited(s1, s2, treeview, $status)
end
def cell_edited(path, str, trvu, cell)
if str != ""
iter = @store.get_iter(path)
iter[cell] = str
end
end
我承认这是我在Gtk2中搜索编辑TreeView时发现的,因为我是Gtk2和GUI的新手
如何将TreeViewFilter
中的路径转换为子模型中的路径(即ListStore
)
或者更简单地说:当用户在筛选表中的单元格时编辑该单元格,如何更新列表中正确的未筛选项?首先,您可以编写如下代码。它更简洁,并且会检查以确保路径有效:
renderer.signal_connect('edited') do |ren, path, text|
next unless iter = @store.get_iter(path)
iter[$status] = text if text != ""
end
对于普通的树视图,您所做的一切都是正确的,但是当您制作Gtk::TreeModelFilter时,您需要使用以下方法将经过过滤的iter转换为孩子的iter:
Gtk::TreeModelFilter#将iter转化为child(filter)
因此,您的代码应该是:
renderer.signal_connect('edited') do |ren, path, text|
next unless iter = @store.get_iter(path)
child_iter = @child_store.convert_iter_to_child(iter)
child_iter[$status] = text if text != ""
end
您应该看看visualruby.net。我将发布一个新版本,它有一个很棒的listview/treeview,在那里你有一个更简单(更rubysh)的api。Gtk的东西变得非常复杂。谢谢!我似乎不得不做一些改动,但之后效果很好。除非iter=需要成为我的过滤器(@filter),而不是存储,否则我所做的更改是下一个更改。convert_iter_to_child_iter(大写表示强调)也需要用于过滤器而不是存储。非常感谢您的帮助,我将查看visualruby.net,因为任何使Gtk更容易/更直观的方法都将非常好!谢谢我今天将上传新版本,其中包含新的listview和treeview内容。让我知道进展如何--E