从 ListBox 行获取标签的更好方法?

Better way to get label from ListBox row?

我正在使用 gtkmm (GTK+3),我发现使用 Gtk::ListBox 的教程少得惊人。我需要能够从 ListBox 中的单个 ListBoxRow 中提取标签。

现在,这段代码 可以 将第一行的标签文本打印到命令行,但它的效率确实不高。

vector<Gtk::Widget*> listChildren = lst_agents.get_children();
vector<Gtk::Widget*> rowChildren = static_cast<Gtk::ListBoxRow*>(listChildren[0])->get_children();
std::cout << static_cast<Gtk::Label*>(rowChildren[0])->get_label() << std::endl;

有没有更好的方法来做到这一点,理想情况下不需要动态分配?我无法想象每一个 Gtk::ListBox 排序都会在每个排序上经历所有这些麻烦,因为 CPU 开销将是巨大的!

环境:Ubuntu15.04,GNU GCC,Code::Blocks,C+11

我认为没有更好的方法,不。除了您必须获得所有子部件的列表才能获得第一个之外,我认为它没有什么大问题。

ListBox 排序将涉及实现 set_sort_func() 回调槽:https://developer.gnome.org/gtkmm/stable/classGtk_1_1ListBox.html#acec1d5f8d73d591fc3eb2772c4f0e480

然后您就已经有了 ListBoxRow: https://developer.gnome.org/gtkmm/stable/classGtk_1_1ListBox.html#a931a0b125d6514e0191a071900bf57c0

所以不会有太多工作要做。无论如何,ListBox 并不意味着显示大量项目 - 因为您需要一个容器小部件来重用子小部件来呈现数据模型 - 例如,Gtk::TreeView.

您的代码的第二行也有错别字:您无法将 ListBoxRow 转换为向量。