You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:17:03