拖放

当使用Gtk::ListStore或者Gtk::TreeStore模型时Gtk::TreeView已经实现了简单的拖放。如果有必要,它还允许你使用常规的拖放API实现更复杂的拖放行为。

10.6.1. 可重排序的行

如果调用Gtk::TreeView::set_reorderable()则你可以在树视图中移动其本身的项目。TreeStore的示例对此进行了演示。

但是,这不允许你控制哪些项目可以拖动以及可以将他们拖动到哪里。如果你想做到这些,你需要从Gtk::TreeStoreGtk::ListStore创建派生的Gtk::TreeModel,然后覆盖Gtk::TreeDragSource::row_draggable_vfunc()Gtk::TreeDragDest::row_drop_possible_vfunc()虚方法。你可以检查提供的Gtk::TreeModel::Path并返回truefalse来允许或禁止拖放。

在drag_and_drop示例中对此进行了演示。