因为我使用的Combobox可能包含很长的文本条目, 导致组合框的宽度增加到超出合理的尺寸, 我试图给组合框提供最大宽度。
如果我这样做:
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);
}
};
使用这种方法,它可以工作,但弹出窗口中的文本(当你点击组合框时打开的东西)也缩短了,这不是我想要的(显然用户应该能够读取整个字符串而我不关心弹出窗口。)
你能帮我解决这个问题吗?我会很高兴任何建议/替代解决方案。
关心tagelicht
答案 0 :(得分:1)
这可能是您正在寻找的:
cell_renderer_text.set_wrap_width(10)
这适用于Python,但你明白了:-)
不幸的是,文档很少。我在Anjuta / Glade中找到了这个。
修改:
文档为here。它们并没有太大的帮助,但确实存在。
答案 1 :(得分:1)
注意: set_wrap_width
是一个函数,用于在指定的列数上包装组合框中的条目总数;它没有回答这个问题。
按照Noup的回答作为指导,我设法得到以下代码;它直接回答了问题及其要求(C ++ / Gtkmm)。
// Get the first cell renderer of the ComboBox.
auto v_cellRenderer = (Gtk::CellRendererText*)v_comboBox.get_first_cell();
// Probably obsolete:
v_cellRenderer->property_width_chars() = 1;
// Sets the ellipses ("...") to be at the end, where text overflows.
v_cellRenderer->property_ellipsize() = Pango::ELLIPSIZE_END;
// Sets the size of the box, change this to suit your needs.
// -1 sets it to automatic.
v_cellRenderer->set_fixed_size(200, -1);
结果: Result of code
BE AWARE:取决于您执行上述代码的位置;要么所有单元格都是相同的大小,要么只是框本身(预期)。 通过实验,我发现:
我建议您将代码放在一个与comboBox更改的信号相关的函数中,例如:
v_comboBox.signal_changed().connect(sigc::mem_fun(*this, &YourClass::v_comboBox_changed));
答案 2 :(得分:0)
作为替代方案,以下内容适用于我,无需设置wrap_width或子类ComboBox(在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;
注意:如果可用,我正在使用Expand来使用空间。如果您只想将组合框保持在固定宽度上,只需删除该位。