Gtk.cellRenderText格式为

Gtk.cellRenderText格式为,gtk,vala,Gtk,Vala,我想写一个定制的CellRenderer来格式化它的内容。与其显示-905.65000,不如显示-905.65€。我已经可以通过Gtk.TreeCellDataFunc实现这一点,但如果使用自定义CellRenderer,它会更加优雅 以下代码给出了分段错误: class CellRendererTextFormat : Gtk.CellRendererText { public new string text { get { return text; } set

我想写一个定制的CellRenderer来格式化它的内容。与其显示
-905.65000
,不如显示
-905.65€
。我已经可以通过
Gtk.TreeCellDataFunc
实现这一点,但如果使用自定义CellRenderer,它会更加优雅

以下代码给出了分段错误:

class CellRendererTextFormat : Gtk.CellRendererText {
    public new string text {
      get { return text; }
      set {
        char[] a = new char[16];
        text = double.parse(value).format(a,"%-.2f €");
      }
    }

    public CellRendererTextFormat () {
        GLib.Object ();
    }
}

我应该怎么做呢?

有两个问题:

1)
text
a
分配内存,该内存被释放。您需要将其分配给超出
集合
范围的持久内存

2)
value
现在是一个字符串(因为您只能指定相同类型的属性值)。你真的有字符串吗,或者你把
parse
放进去只是为了让它工作

相反:

class CellRendererEuroValue : Gtk.CellRendererText {
    char[] euro_str = new char[16];
    private double _euro_value;
    public double euro_value {
      get { return _euro_value; }
      set {
        _euro_value = value;
        value.format(euro_str,"%-.2f €");
        text = (string) euro_str;
      }
    }

    public CellRendererTextFormat () {
        GLib.Object ();
    }
}

是的,value是我需要解析为double的字符串。您通过
euro\u value
更改了变量
text
,实际上我想从
Gtk.cellRenderText
覆盖
text
参数,您是否会以其他方式显示
euro\u value
?您使用的是
new
,因此它不会被覆盖。您应该在属性设置器之外进行分析,以便处理错误。编辑了代码。非常感谢,成功了。只需要将“欧元价值”添加到我的列属性中^^"