2012-07-05 56 views
0

在我的应用程序中,我有一个GtkIconView单选模式。我想要获取所选项目的文本(并按照该行进一步采取行动)。现在,我有一些我瘦的代码可以工作,但是实际得到的GtkTreePath会使程序崩溃(segfault)。Vala/GTK + 3:从GtkIconView获取数据

Program received signal SIGSEGV, Segmentation fault. 
0x0804d350 in minkovsky_ufilter_ufilter_window_on_filter_selected (
    e=0x8172010, self=0x8354d80) 
    at /home/filip/ufilter/src/UfilterWindow.vala:281 
281    TreePath item = filterchooser.get_selected_items().data; 

你能告诉我为什么发生了(以及如何解决它)?

谢谢。

编辑:我做了一些更多的测试,但他们仍然没有定论。也就是说,我想检查是否get_selected_items()返回null(导致问题),但它只是在新的地方再次分段。这是代码:

[CCode (instance_pos = -1)] 
    public void on_filter_selected (Event e) { 

     if(filterchooser.get_selected_items() == null){ // <-- Now happens here 
      stderr.printf("Null!"); 
      return; 
     } 

     TreePath item = filterchooser.get_selected_items().data; // <-- Used to happen here 
     TreeIter iter; 
     string selection; 
     filterchooser_liststore.get_iter(out iter, item); 
     filterchooser_liststore.get(iter, 0, out selection); 
     stderr.printf("Selected filter: %s\n", selection); 
    } 

编辑2:这是stripped-down version。它包含:两个源文件,一个glade文件和示例图像,以及一个带有编译命令的自述文件。您将需要Valac v0.16,GTK + 3.0和GModule 2.0(我可以将它进一步剥离下来,但它只是缺少一点:在生产代码中需要这些)。仍然段错误。

+0

没有人可以告诉你,除非你显示的代码崩溃。 – ptomato 2012-07-05 16:14:00

+0

嗯,在这里。我只是想先做一些测试。 – FLamparski 2012-07-05 17:02:28

+0

filterchooser null?如果不是这样,那么如果你可以发布一个最小但可执行的测试用例会很有帮助(见http://sscce.org) - 我没有发现任何与你上面有什么内在的错误。 – nemequ 2012-07-06 01:04:31

回答

1

的问题是,你的on_filter_selected签名不匹配它连接到(GtkIconView::item-activated,或者如果你喜欢Valadoc Gtk.IconView.item_activated)的信号。你有

public void on_filter_selected (Event e) ... 

但它应该是这样的

public void on_filter_selected (Gtk.IconView view, Gtk.TreePath path) { 
    Gtk.TreeIter iter; 
    string selection; 

    GLib.return_if_fail (filterchooser_liststore.get_iter (out iter, path)); 
    filterchooser_liststore.get (iter, 1, out selection); 
    GLib.stderr.printf ("Selected filter: %s\n", selection); 
} 
+0

没有好的,发生这种情况:http://pastebin.com/LVjQVZwe – FLamparski 2012-07-17 07:06:17

+0

没有看看你的更新的实现该功能,我不能告诉你什么是错的,但我已经添加了一个实现我发布的工作我。 – nemequ 2012-07-17 22:26:29

+0

这个工程!非常感谢你! – FLamparski 2012-07-18 09:07:51