我目前正在尝试根据文本框的输入过滤TreeView
,同时仍允许用户编辑TreeView
的单元格。
我遇到的问题是,当TreeView
使用TreeModelFilter
编辑子模型时,ListStore
无法翻译编辑,这是CellRendererText
单元格(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
)编辑的signal_connect如下所示:
TreeViewFilter
我承认我会在Gtk2中搜索编辑TreeViews,因为我是一般的GTK2和GUI新手。
如何将ListStore
中的路径转换为子模型中的路径({{1}})?
或者更简单地说:当用户在过滤时编辑表格中的单元格时,如何更新列表中正确的未过滤条目?
答案 0 :(得分:1)
首先,您可以编写如下代码。它更简洁,并检查以确保路径有效:
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#convert_iter_to_child_iter(filter_iter)
http://ruby-gnome2.sourceforge.jp/ja/hiki.cgi?Gtk%3A%3ATreeModelFilter
所以你的代码应该是:
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,你可以更容易(更多rubyish)api。 Gtk的东西变得非常复杂。