1

还有另一个 TreeView 问题,应该使用 qt ;)

我有一个 TreeView,我在其中使用以下函数来呈现文本:

private void RenderEntryValue (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
{
      (cell as Gtk.CellRendererText).Markup = "" + someMarkupText;
      (cell as Gtk.CellRendererText).Alignment = Pango.Alignment.Center;
}

正如您可能已经从主题中猜到的那样,这不起作用。文本保持左对齐。除了在它的左边添加空格之外,任何想法如何使它工作?

除了添加和伪装列之外,代码中没有其他地方可以对 TreeView 做任何事情。并且在那里没有设置对齐。

4

2 回答 2

2

似乎alignment这只影响布局中文本的对齐方式。由于布局仅与其包含的文本一样宽,因此alignment除非有多行,否则什么都不做。

要实际使文本在列中居中,您还需要 set xalign = 0.5f,因此:

private void RenderEntryValue (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
{
    (cell as Gtk.CellRendererText).Markup = "" + someMarkupText;
    (cell as Gtk.CellRendererText).Alignment = Pango.Alignment.Center;
    cell.Xalign = 0.5f;
}
于 2012-07-20T18:31:33.643 回答
0

虽然不是解决方案,但我至少找到了自定义 CellRenderer 形式的解决方法。不知何故,这并没有将文本真正放在中心,而是将一些像素放在它的左侧,但这仍然比完全忽略对齐要好得多;)

public class CellRendererAlignedText : CellRendererText
{
    /**
     * Overridden render method to position text correctly.
     * */
    protected override void Render (Gdk.Drawable window, 
                                    Widget widget, 
                                    Gdk.Rectangle background_area, 
                                    Gdk.Rectangle cell_area, 
                                    Gdk.Rectangle expose_area, 
                                    CellRendererState flags)
    {
        if (Alignment == Pango.Alignment.Center)
        {   
            cell_area.X += background_area.Width/4;
            cell_area.Width /= 2;
        }
        base.Render (window, widget, background_area, cell_area, expose_area, flags);
    }
}
于 2012-03-25T15:43:10.833 回答