【发布时间】:2017-04-14 15:03:15
【问题描述】:
因为我使用的组合框可能包含非常长的文本条目, 这导致组合框的宽度远远超出合理的大小, 我正在尝试为组合框提供最大宽度。
如果我这样做:
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);
}
};
使用这种方法,它可以工作,但是弹出窗口中的文本(当您单击组合框时打开的内容)也被缩短了,这不是我想要的(显然用户应该能够阅读整个字符串而我没有关心弹出窗口的宽度。)
你能帮我解决这个问题吗?我很乐意提供任何建议/替代解决方案。
问候标签
【问题讨论】:
-
所以你想限制组合框的宽度但不限制组合框弹出的宽度?
-
完全正确。我对此感到非常绝望,因为这似乎是常见的行为,我只是不知道如何实现它:(