2017-04-14 70 views
1

因为我使用的组合框可能包含很长的尺寸, 这会导致组合框的宽度远远超出合理尺寸,我试图给出最大宽度组合框。Gtk(mm)组合框的极限宽度

如果我这样做是这样的:

class MyCombo : public Gtk::ComboBox { 
    private: 
     CellRendererText render; 
    public: 
     MyCombo() { 
      render.property_width_chars() = 10; 
      render.property_ellipsize() = Pango::ELLIPSIZE_END; 
      pack_start(render, true); 
     } 
}; 

结果将所需宽度的空白单元格,因为我没有指定要显示的列,这似乎合乎逻辑的。但是,我怎么能这样做呢?使用pack_start只会绕过渲染...

另一种方法是这样的一个:

class MyCombo : public Gtk::ComboBox { 
    private: 
     CellRendererText render; 
    public: 
     MyCombo() { 
      pack_start(render, true); 
      set_cell_data_func(render, sigc::mem_fun(*this, &MyCombo::render_iter)); 
     } 

     void render_iter(const TreeModel::const_iterator& iter) { 
      Glib::ustring data = get_string_from_iter(iter); 
      int desired_width_chars = 10; //for example 
      render.property_text() = ellipsize_string(data, desired_width_chars); 
     } 
}; 

使用这种方法,它的工作原理,但在弹出的文本(什么打开了当u点击下拉框)也缩短了,这是不是我想要的(显然,用户应该能够阅读整个字符串,我不在乎弹出窗口)。

你能帮我一下吗?我会很乐意提供任何建议/替代解决方案。

问候tagelicht

+0

所以你想限制组合框的宽度,但不限制组合框弹出的宽度? – theGtknerd

+0

。我真的很绝望,因为这似乎是常见的行为,我只是没有得到如何实现它:( – tagelicht

回答

1

这可能是你在找什么:

cell_renderer_text.set_wrap_width(10) 

这是Python,但你的想法:-)

不幸的是,该文件是稀缺的。我在Anjuta/Glade中找到了这个。

编辑:

的文档是here。它们不是非常有帮助,但它们确实存在。

+0

多数民众赞成在完美的感谢:)它的作品像一个魅力....但你是正确的文件是可怕的..我在花了几个小时寻找这个问题之前,所有这些属性根本没有任何文档... – tagelicht

0

作为替代,以下为我工作,而无需设置wrap_width也不是子类组合框(用GTK#):

ComboBoxText cb = new ComboBoxText(); 
cb.Hexpand = true; //If there's available space, we use it 
CellRendererText renderer = (cb.Cells[0] as CellRendererText); //Get the ComboBoxText only renderer 
renderer.WidthChars = 20; //Always show at least 20 chars 
renderer.Ellipsize = Pango.EllipsizeMode.End; 

注:我使用的是扩大使用空间,如果它是可用的。如果你只是想把组合框保持在一个固定的宽度,只需要移除那个位。