我正在尝试使用set_cell_data_funcon Gtk.TreeViewColumn.我的代码编译但在运行时出现分段错误.我也试过了,insert_column_with_data_func但结果是一样的.
这是我的代码,我希望你能帮助我:)
public class Application : Gtk.Window {
public Application () {
this.destroy.connect (Gtk.main_quit);
this.set_default_size (600, 400);
Gtk.ListStore store = new Gtk.ListStore (2, typeof(int),
typeof(string));
Gtk.TreeIter iter;
store.append (out iter);
store.set (iter, 0, 0, 1, "A");
store.append (out iter);
store.set (iter, 0, 1, 1, "B");
store.append (out iter);
store.set (iter, 0, 0, 1, "C");
store.append (out iter);
store.set (iter, 0, 0, 1, "D");
Gtk.TreeView view = new Gtk.TreeView.with_model (store);
this.add(view);
Gtk.CellRendererText cell = new Gtk.CellRendererText ();
Gtk.TreeViewColumn col = new Gtk.TreeViewColumn.with_attributes (
"Value", cell, "text", 1);
col.set_cell_data_func (cell, (Gtk.CellLayoutDataFunc)render_value);
view.append_column (col);
}
public void render_value (Gtk.TreeViewColumn column, Gtk.CellRendererText
cell, Gtk.TreeModel model, Gtk.TreeIter iter) {
var val = Value (typeof(int));
model.get_value (iter, 0, out val);
if ((int)val==1) (cell as Gtk.CellRendererText).background = "#b8cb04";
val.unset ();
}
public static int main (string[] args) {
Gtk.init (ref args);
Application app = new Application ();
app.show_all ();
Gtk.main ();
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
在调试翻译的c源后我发现了这个bug.
vala 转换
public void render_value (Gtk.TreeViewColumn column,
Gtk.CellRendererText cell,
Gtk.TreeModel model,
Gtk.TreeIter iter)
Run Code Online (Sandbox Code Playgroud)
从您的代码到以下c等价物
void application_render_value (Application* self,
GtkTreeViewColumn* column,
GtkCellRendererText* cell,
GtkTreeModel* model,
GtkTreeIter* iter)
Run Code Online (Sandbox Code Playgroud)
我将其与参考文档进行了比较.
在那里,数据功能的签名定义如下
void (*GtkCellLayoutDataFunc) (GtkCellLayout *cell_layout,
GtkCellRenderer *cell,
GtkTreeModel *tree_model,
GtkTreeIter *iter,
gpointer data);
Run Code Online (Sandbox Code Playgroud)
关于您实现的方法,这意味着参数向右移动一个.因此以下内容适用于您的数据func /方法
column 实际上是细胞渲染器cell 是树模型model 是迭代器和iter 是传递给函数/方法的数据如果您将数据func /方法的声明更改为
public void render_value (Gtk.CellRendererText cell,
Gtk.TreeModel model, Gtk.TreeIter iter, Object data)
Run Code Online (Sandbox Code Playgroud)
一切都应该工作正常.
也许这样做的原因CellLayoutDataFunc是定义为public delegate void.但是因为我对此一无所知vala只是猜测.如果不是这种情况,您可以将其发布在相关的vala邮件列表中.
| 归档时间: |
|
| 查看次数: |
581 次 |
| 最近记录: |