Gtkmm拖放问题:放置阶段值校验失败
拖放功能实现中的类型校验失败问题
问题背景
我参考Gtkmm官方文档的拖放示例实现拖放功能,在DragSource的prepare信号回调中完成字符串向量的包装,在DropTarget的drop信号回调中做类型校验,但校验失败,控制台输出了一系列错误信息。
DragSource端实现代码
// ... Glib::Value<std::vector<Glib::ustring>> value_obj; value_obj.init(value_obj.value_type()); value_obj.set(list_of_strings); provided_content = Gdk::ContentProvider::create(value_obj); return provided_content; //...
DropTarget端实现代码
auto drop_target = Gtk::DropTarget::create(G_TYPE_BOXED, Gdk::DragAction::MOVE); drop_target->signal_drop().connect([this](const Glib::ValueBase& value, double x, double y) -> bool { if (!G_VALUE_HOLDS(value.gobj(), Glib::Value<std::vector<Glib::ustring>>::value_type())) { return false; } //...
控制台错误输出
(yae-app:23778): Gdk-CRITICAL **: 20:28:43.375: gdk_drop_finish: assertion 'priv->state == GDK_DROP_STATE_DROPPING' failed (yae-app:23778): GLib-GObject-CRITICAL **: 20:28:44.199: ../../../gobject/gtype.c:4393: type id '0' is invalid (yae-app:23778): GLib-GObject-CRITICAL **: 20:28:44.200: can't peek value table for type '<invalid>' which is not currently referenced (yae-app:23778): GLib-GObject-CRITICAL **: 20:28:44.200: ../../../gobject/gvalue.c:104: cannot initialize GValue with type '(null)', this type has no GTypeValueTable implementation (yae-app:23778): Gdk-CRITICAL **: 20:28:44.200: gdk_content_provider_get_value: assertion 'G_IS_VALUE (value)' failed (yae-app:23778): GLib-GObject-CRITICAL **: 20:28:44.200: ../../../gobject/gtype.c:4393: type id '0' is invalid (yae-app:23778): GLib-GObject-CRITICAL **: 20:28:44.200: can't peek value table for type '<invalid>' which is not currently referenced (yae-app:23778): GLib-GObject-CRITICAL **: 20:28:44.200: ../../../gobject/gvalue.c:104: cannot initialize GValue with type '(null)', this type has no GTypeValueTable implementation (yae-app:23778): Gdk-CRITICAL **: 20:28:44.200: gdk_content_provider_get_value: assertion 'G_IS_VALUE (value)' failed (yae-app:23778): GLib-GIO-CRITICAL **: 20:28:44.200: g_task_return_error: assertion 'error != NULL' failed (yae-app:23778): GLib-GIO-CRITICAL **: 20:28:44.200: GTask source_tag (source object: 0xc7628546b630, source tag: 0xe58941686df4) finalized without ever returning (using g_task_return_*()). This potentially indicates a bug in the program.
我的疑问
我完全照着示例的思路来写,但搞不懂为什么类型校验会失败,想确认我给DropTarget设置的类型是否正确。
内容的提问来源于stack exchange,提问作者xBACP
相关产品推荐
相关产品推荐

