使用g_object_bind_property双向绑定字符串时UI冻结,绑定数字无异常的问题求助
g_object_bind_property双向绑定字符串时UI冻结,绑定数字无异常的问题求助
各位好,我最近在做GTK4项目,尝试从自定义对话框更新GtkColumnView的行数据时遇到了一个棘手的问题:用g_object_bind_property做双向绑定时,绑定数字类型属性完全正常,界面能实时更新且流畅,但绑定字符串类型属性时,只要一修改输入框内容,整个UI就直接冻结,只能强制退出程序。
下面是我定义数据模型的关键代码(cell_item.c),麻烦帮忙排查下问题:
#include "CellItem.h" struct _CellItem { GObject parent_instance; char *name; char *carrera; int grado; }; struct _CellItemClass { GObjectClass parent_class; }; enum { PROP_NAME = 1, PROP_CARRER = 2, PROP_GRADE = 3, N_PROPERTIES }; GParamSpec *obj_properties[N_PROPERTIES] = { NULL, }; G_DEFINE_TYPE (CellItem, cell_item, G_TYPE_OBJECT) void cell_item_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { CellItem *self = CELL_ITEM (object); switch (prop_id) { case PROP_NAME: g_value_set_string (value, self->name); break; case PROP_CARRER: g_value_set_string (value, self->carrera); break; case PROP_GRADE: g_value_set_int (value, self->grado); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } }
(注:代码后续部分不小心截断了,但get_property逻辑是完整的;set_property我是按常规GObject属性写法,先g_free旧值,再用g_strdup复制新值,最后通知属性变化)
我在对话框中的绑定代码大致如下:
// 绑定数字属性(正常工作) g_object_bind_property(entry_grade, "text", selected_item, "grado", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); // 绑定字符串属性(导致UI冻结) g_object_bind_property(entry_name, "text", selected_item, "name", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
有没有大佬遇到过类似问题?或者能看出我在字符串属性定义/处理上有什么遗漏吗?比如有没有字符串特有的GObject属性配置项我没加?
备注:内容来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

