我正在使用CellRendererPixbuf动态添加我的列,其代码如下:
private void add_column (TrackColumns type) {
var column = new Gtk.TreeViewColumn () ;
column.title = type.get_title () ;
var renderer = type.get_cell_renderer () ;
column.pack_start (renderer, true);
//
column.set_attributes (renderer, (type == TrackColumns.ICON) ? "pixbuf" : "text", type) ;
treeview.insert_column (column, -1);
}
方法TrackColumns.get_cell_renderer
是
public Gtk.CellRenderer get_cell_renderer () {
if( this == ICON )
{
var result = new Gtk.CellRendererPixbuf ();
//icon_renderer.follow_state = true;
return result ;
}
if( this == TITLE )
{
var result = new Gtk.CellRendererText ();
result.height = TrackListView.COLUMN_HEIGHT;
return result ;
}
var result = new Gtk.CellRendererText ();
result.height = TrackListView.COLUMN_HEIGHT;
result.xpad = TrackListView.SPACING;
return result ;
}
我希望CellRendererPixbuf
显示GIcon
。
上面的代码没有显示任何内容,并给出了以下警告:
unable to set property 'pixbuf' of type 'GdkPixbuf' from value of type 'GIcon'
出了什么问题?
答案 0 :(得分:0)
正确的代码是:
column.set_attributes (renderer, (type == TrackColumns.ICON) ? "gicon" : "text", type) ;
set_attributes方法定义要设置的渲染器的属性名称以及渲染单元格时要使用的值。
在我的代码中,我只有两种类型的渲染器:CellRendererText
和CellRendererPixbuf
。
因为我希望Gtk.Treeview使用我的列值设置CellRendererPixbuf.gicon,所以当我的列类型为{{1}时,我需要传递"gicon"
(而不是"pixbuf"
) }。
其余时间,我使用TrackColumns.ICON
,因此我需要使用CellRendererText.text,然后通过CellRendererText
。
所有这些(以及更多)都解释为there。