【发布时间】:2018-02-13 20:38:26
【问题描述】:
我有以下 GTK+ 程序,它使用 Glade 生成的 XML 文件来构建它的 GUI。
#include <gtk/gtk.h>
#include <stdlib.h>
#include <string.h>
////////////////////////////////////////////////////
// Example can be compiled with:
// gcc gui.c `pkg-config --cflags --libs gtk+-2.0`
//
// GUI file from glade must be in same folder from
// which the compiled binary is called.
////////////////////////////////////////////////////
int main(int argc, char* argv[]) {
GtkBuilder* gtkBuilder = gtk_builder_new();
gtk_init(&argc, &argv);
gtk_builder_add_from_file(gtkBuilder, "gui.glade", NULL);
GtkTreeStore* treestore = GTK_TREE_STORE(gtk_builder_get_object(gtkBuilder, "treestore"));
GtkTreeIter iterChild;
gtk_tree_store_append(treestore, &iterChild, NULL);
gtk_tree_store_set(treestore, &iterChild, 0, "a", -1);
gtk_tree_store_append(treestore, &iterChild, NULL);
gtk_tree_store_set(treestore, &iterChild, 0, "b", -1);
gtk_tree_store_append(treestore, &iterChild, NULL);
gtk_tree_store_set(treestore, &iterChild, 0, "m", -1);
gtk_tree_store_append(treestore, &iterChild, NULL);
gtk_tree_store_set(treestore, &iterChild, 0, "k", -1);
gtk_tree_store_append(treestore, &iterChild, NULL);
gtk_tree_store_set(treestore, &iterChild, 0, "g", -1);
gtk_builder_connect_signals(gtkBuilder, NULL);
gtk_widget_show(GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "main")));
g_object_unref(G_OBJECT(gtkBuilder));
gtk_main();
return 0;
}
XML Glade 文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkTreeStore" id="treestore">
<columns>
<!-- column-name col -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkWindow" id="main">
<property name="can_focus">False</property>
<property name="default_width">690</property>
<property name="default_height">500</property>
<signal name="destroy" handler="gtk_main_quit" swapped="no"/>
<child>
<object class="GtkTreeView" id="treeview">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">treestore</property>
<property name="reorderable">True</property>
<property name="level_indentation">1</property>
<property name="enable_tree_lines">True</property>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn">
<property name="sizing">fixed</property>
<property name="title" translatable="yes">column</property>
<property name="clickable">True</property>
<property name="sort_indicator">True</property>
<property name="sort_column_id">0</property>
<child>
<object class="GtkCellRendererText" id="treeviewrenderer">
<property name="height">30</property>
</object>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>
当应用程序启动时,行可以通过拖放重新排序。单击列标题后,将对行进行排序。之后它们不能再通过 Drag 'n' Drop 重新排列。
有没有办法在行排序后重新激活手动重新排序?
我尝试过,例如,从回调函数中调用 gtk_tree_view_set_reorderable()(回调为 on_cursor_moved()),但这不起作用。
当使用 Glade XML 文件构建 GUI 时,是否可以在已排序和可重新排序的行之间切换?
【问题讨论】:
标签: c gtk glade gtk2 gtktreeview