- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 Glade 中创建了一个带有 TreeView 的 GUI。这是 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkListStore" id="liststore1">
<columns>
<!-- column-name column1 -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<child>
<object class="GtkTreeView" id="treeview1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">liststore1</property>
</object>
</child>
</object>
</interface>
我正在尝试在列表中设置一些数据并使用以下方法检索它代码:
#include <gtk/gtk.h>
int main(int argc, char * argv[]) {
GtkBuilder* gtkBuilder = gtk_builder_new();
GtkWidget* mainwin;
gtk_init(&argc, &argv);
gtk_builder_add_from_file(gtkBuilder, "test.glade", NULL);
mainwin = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "window1"));
// set treeview data
GtkTreeView *treeview = NULL;
GtkTreeModel *model = NULL;
GtkListStore *liststore = NULL;
GtkTreeIter iter;
gchar* data = "Hello World";
gchar* item = NULL;
treeview = GTK_TREE_VIEW(gtk_builder_get_object(gtkBuilder, "treeview1"));
model = gtk_tree_view_get_model(treeview);
liststore = GTK_LIST_STORE(model);
gtk_list_store_append(liststore, &iter);
gtk_list_store_set(liststore, &iter, 0, data, -1);
gtk_tree_model_get(model, &iter, 0, item, -1);
printf("item: %s\n", item);
g_object_unref(G_OBJECT(gtkBuilder));
g_signal_connect(mainwin, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show(mainwin);
gtk_main();
}
但是,数据既没有显示在 TreeView 中,也无法检索之前插入的数据。我不知道数据是否已正确插入到列表中和/或我是否只是试图以错误的方式接收数据。
最佳答案
Gets the value of one or more cells in the row referenced by iter . The variable argument list should contain integer column numbers, each column number followed by a place to store the value being retrieved. The list is terminated by a -1. For example, to get a value from column 0 with type G_TYPE_STRING, you would write: gtk_tree_model_get (model, iter, 0, &place_string_here, -1), where place_string_here is a gchararray to be filled with the string.
因此,您应该更改代码:
gtk_tree_model_get(model, &iter, 0, item, -1);
收件人:
gtk_tree_model_get(model, &iter, 0, &item, -1);
另请注意:
Returned values with type G_TYPE_OBJECT have to be unreferenced, values with type G_TYPE_STRING or G_TYPE_BOXED have to be freed. Other values are passed by value.
因此,您需要释放 item
,例如g_free (item);
,使用后。
编辑:
TreeView 没有 TreeViewColumn,也没有 CellRendererText。
我已将这些添加到您的空地文件中:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.19.0 -->
<interface>
<requires lib="gtk+" version="3.0"/>
<object class="GtkListStore" id="liststore1">
<columns>
<!-- column-name column1 -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<child>
<object class="GtkTreeView" id="treeview1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">liststore1</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection1"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn1">
<property name="title" translatable="yes">column</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext1">
<property name="height">40</property>
</object>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>
它现在应该可以工作了:
关于c - 从 GtkListStore 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48567771/
我已经包含了一小段代码。我正在制作一个包含 5 列的 TreeView 。我在最后一列中粘贴了生成要存储在 GtkListStore 中的数据的 for 循环。我可以轻松地将 TreeView 的列居
我正在用 C 编写程序并使用 Gtk+ 作为 GUI。一切正常,但我对可能的内存泄漏有些怀疑。 我需要显示一个元素列表,然后通过搜索栏和按钮过滤这个列表。我想将 GtkTreeView 与 GtkLi
我正在尝试使用我找到的代码段将非文本对象保留在 ListStore 中。这些是对象: class Series(gobject.GObject, object): def __init__(self
我尝试将 GTKButton 添加到 GtkListStore 来编辑每行中的数据...该按钮没有出现,并且我收到此错误消息:“GLib-GObject-WARNING **:无法设置属性 text'
我可以在 GtkListStore 中存储未指定的类型吗?比如我想存储在一个字段中——int类型的字段和GdkColor类型的字段? 最佳答案 我想你的意思是unions in C C++ 关于c++
我正在尝试将 GSList 传递给 GtkListStore 以显示给用户。但是当我将值设置为 GtkListStore 时,它只会给我段错误。我真的不知道问题出在哪里。我测试了列表,所以它不是空
我在 Glade 中创建了一个带有 TreeView 的 GUI。这是 XML 文件: False
如何连接 GtkTreeVew 和 GtkListStore? 我的 TreeView 可以很好地显示 ListStore 的数据,但当用户更改其中一个 cellrenderer 小部件中的值时,不会
您好,我使用glade 编写了一个小型gtk 应用程序。 该应用程序包括一个列表存储。每当用户单击一行时,我都希望能够获取该行包含的信息。 在 row-changed 事件下使用 Glade 我添加了
我想要一个用于 GtkListStore 的带有文本的按钮。我使用图像作为按钮阅读了另一个答案,但我确实需要标题为文本。我怎样才能做到这一点?我也可以使用将文本呈现到 GdkPixbuf 上的解决方案
我正在开发一个小型 PyGtk 项目,该项目使用 GtkListStore 来包含我想在 GtkIconView 中显示为图标的元素数据。我正在使用 Glade 设计 UI。 我知道如何以编程方式将数
我正在使用这段代码创建一个带有彩色背景/文本的组合框: GtkListStore *liststore; GtkWidget *combo; GtkCellRenderer *column; list
我试图在 Gtk.TreeView 的不同列上显示对象的属性.说我有以下几点: class MyClass(GObject.GObject): def __init__(self, first
我一直在自学如何用 C 编写代码并利用 GTK 在 Linux 中编写应用程序,在实现它之前使用 Glade 设计 UI。我一直在尝试结合使用 GtkTreeView 和 GtkListStore 来
我用 C 语言将一个程序移植到 GTK3,除了一件事之外,一切都很完美。假设 TreeView 一次只显示 10 行,但填充了 100 行,其他行当然不在 View 中, TreeView 设置为单选
我是一名优秀的程序员,十分优秀!