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

gtk_message_dialog_new无临时父窗口提示及参数警告如何修复?

问题根因

  1. 「GtkDialog mapped without a transient parent. This is discouraged.」警告触发原因:你调用gtk_message_dialog_new()时第一个参数传入了NULL,没有给模态对话框绑定父窗口,GTK不推荐模态对话框无父窗口独立存在。
  2. 编译器类型不兼容警告触发原因:gtk_window_set_transient_for()的两个入参要求都是GtkWindow*类型,你传入的notice和main_window都是GtkWidget*类型,未做类型转换导致类型不匹配。

修复方案

推荐直接在创建对话框时绑定父窗口,无需额外调用gtk_window_set_transient_for(),一步解决两个问题:

int Notice(char *title, char *message,  GtkButtonsType buttons)
{   
    int response;
    // 第一个参数直接传入转为GtkWindow*类型的main_window,替代原来的NULL
    GtkWidget *notice = gtk_message_dialog_new(GTK_WINDOW(main_window),
        GTK_DIALOG_MODAL, GTK_MESSAGE_INFO,
        buttons,
        "%s", title);

    gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(notice), "%s", message);

    response = gtk_dialog_run(GTK_DIALOG(notice));

    gtk_widget_destroy(notice);

    return response;
}

如果你需要单独调用gtk_window_set_transient_for()做动态绑定,修改该调用的参数类型即可:

// 两个参数都转为GtkWindow*类型
gtk_window_set_transient_for(GTK_WINDOW(notice), GTK_WINDOW(main_window));

注意事项

确保调用Notice函数时,全局的main_window已经完成初始化且是有效的顶层GtkWindow实例,不能为未初始化的空指针。

内容的提问来源于stack exchange,提问作者KJ7LNW

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:45:04