2015-05-13 3 views
0

Я работаю с gtkmm (GTK + 3), и я нахожу, что есть удивительно мало учебников для работы с Gtk::ListBox. Мне нужно получить ярлык из одного ListBoxRow в ListBox.Лучший способ получить ярлык из строки ListBox?

Прямо сейчас, этот код работает, чтобы напечатать текст метки первой строки в командной строке, но это действительно не очень эффективно.

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 проходит через все эти проблемы для каждого типа, потому что накладные расходы процессора будут огромными!

СРЕДА: Ubuntu 15,04, GNU GCC, Code :: Blocks, C + 11

+1

Не можете использовать ['Gtk :: ListBox :: get_row_at_index()'] (https://developer.gnome.org/gtkmm/stable/classGtk_1_1ListBox.html#a9825f1198ac6043a56717f8b32a34692)? – ace

+0

Спасибо, это полезно в целом. Я пытался найти функцию WHAT для использования в этой ситуации. Документы являются тщательными, но их непросто найти. – CodeMouse92

ответ

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 для вектора.

+1

Спасибо за помощь, как прямую (отвечая на вопрос), так и косвенную (рекомендация инструмента). Я действительно переключусь на TreeView на основе вашей рекомендации. Очень признателен! Что касается типового ... вау, то я работаю с C/Pd, так что у нас есть Шродинбуг в действии. Никогда не думал, что я увижу одного из тех, кто одинок. – CodeMouse92

Смежные вопросы