根据 GTK+ 参考手册,使用 gtk_tree_view_set_reorderable 将启用拖放以重新排序行。
我在 Linux 中使用 GTK+ 3 和 GTK+ 2 进行了尝试,它似乎工作正常。但是当我在 Microsoft Windows 中尝试使用 GTK+ 2.24.0 时,我只能拖动行而不能放下它们。
我使用 Ubuntu Linux 11.04(带有 Gnome 3 Desktop)和 Microsoft Windows XP Service Pack 3 对其进行了测试。
除了将 reorderable 设置为 TRUE 之外,我还需要在 Microsoft Windows 中执行其他操作吗?
这是我用来测试的一个简单程序:
#include <gtk/gtk.h>
enum
{
TITLE_COLUMN,
N_COLUMNS
};
int
main (int argc, char* argv[])
{
gtk_init (&argc, &argv);
GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
GtkListStore *store = gtk_list_store_new (1, G_TYPE_STRING);
gtk_list_store_insert_with_values (store, NULL, -1, TITLE_COLUMN, "Ubuntu", -1);
gtk_list_store_insert_with_values (store, NULL, -1, TITLE_COLUMN, "Fedora", -1);
gtk_list_store_insert_with_values (store, NULL, -1, TITLE_COLUMN, "Debian", -1);
gtk_list_store_insert_with_values (store, NULL, -1, TITLE_COLUMN, "Arch Linux", -1);
gtk_list_store_insert_with_values (store, NULL, -1, TITLE_COLUMN, "Mandriva", -1);
gtk_list_store_insert_with_values (store, NULL, -1, TITLE_COLUMN, "Gentoo", -1);
gtk_list_store_insert_with_values (store, NULL, -1, TITLE_COLUMN, "openSUSE", -1);
gtk_list_store_insert_with_values (store, NULL, -1, TITLE_COLUMN, "Slackware", -1);
GtkWidget* tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
gtk_tree_view_set_reorderable (GTK_TREE_VIEW (tree), TRUE);
gtk_container_add (GTK_CONTAINER (window), tree);
g_object_unref (G_OBJECT (store));
GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes ("Linux Distribution",
gtk_cell_renderer_text_new (),
"text", TITLE_COLUMN,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
gtk_widget_show_all (window);
gtk_main ();
return 0;
}