我正在使用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开销会很大!
环境:Ubuntu 15.04,GNU GCC,Code :: Blocks,C + 11
答案 0 :(得分:1)
我不认为有更好的方法,不。除了你必须得到所有子窗口小部件的列表以获得第一个之外,我认为它没有什么大问题。
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强制转换为向量。