Я изучаю, как использовать GTKmm, и мне очень трудно понять, как поместить изображение в древовидную структуру. Я использовал Glade для создания древовидного хранилища с 3 столбцами, один из которых — GdkPixbuf
с именем store_pixbuf
. Я также создал древовидное представление на поляне со столбцом, в котором есть средство визуализации ячеек pixbuf под названием int_col_pict
и средство визуализации ячеек массива символов. В моем коде у меня есть обычное определение MyColumns
для хранилища дерева, например:
class MyModelColumns : public Gtk::TreeModel::ColumnRecord
{
public:
Gtk::TreeModelColumn<Glib::ustring> store_hostname;
Gtk::TreeModelColumn<Glib::ustring> store_intname;
Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf> > store_pict;
MyModelColumns () { add(store_hostname); add(store_intname); add(store_pict);}
};
и используйте следующий фрагмент кода для его заполнения.
//Get a pointer to the treestore
Glib::RefPtr<Gtk::TreeStore> treestore = Glib::RefPtr<Gtk::TreeStore>::cast_static(builder->get_object("routerTreeStore"));
//make sure the pointer isn't bad
if(treestore){
MyModelColumns columns;
//populate the first column
Gtk::TreeRow row= *(treestore->append());
row[columns.store_hostname] = router->hostname;
//populate all children
for(int i=0; i<router->interfaces.size(); i++)
{
//append child row
Gtk::TreeRow child = *(treestore->append(row.children()));
//insert data into the row
child[columns.store_pict] = Gdk::Pixbuf::create_from_file("red_dot.png");
child[columns.store_intname] = router->interfaces[i].interfaceName;
}
}//if
Сначала я пытался использовать стоковое изображение, но не мог понять, какую функцию я должен использовать, поэтому я попытался использовать Gdk::Pixbuf::create_from_file()
(как вы можете видеть выше), но во время выполнения я получаю следующую ошибку:
Gtk-WARNING **: gtktreestore.c:765: Unable to convert from GdkPixbuf to gtkmm__GdkPixbuf
Нажмите здесь, чтобы посмотреть, как это выглядит при работе. Изображение должно располагаться на той же строке, что и строки «FastEthernet...».
Кто-нибудь знает, как я могу это решить? Я поступаю совершенно неправильно? Спасибо за внимание, любая помощь приветствуется!