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

能否使用gtk_widget_destroy关闭GTK退出对话框?附示例代码

当然可以用gtk_widget_destroy()关闭GTK确认对话框

直接给结论:你完全可以调用gtk_widget_destroy(dialog)来关闭并销毁这个确认对话框,这是GTK里处理一次性对话框的常规操作,非常适配你写的这种确认场景。

结合你的代码示例说明

我把你没写完的代码补全,并加上销毁对话框的逻辑,方便你参考:

gint confirmation_dialog() {
    GtkWidget *label;
    GtkWidget *box;
    GtkWidget *dialog;
    gint response;

    gtk_init(NULL,NULL);

    // 用便捷API创建模态确认对话框
    dialog = gtk_dialog_new_with_buttons(
        "Confirmation",
        NULL,
        GTK_DIALOG_MODAL,
        GTK_STOCK_YES, GTK_RESPONSE_YES,
        GTK_STOCK_NO, GTK_RESPONSE_NO,
        NULL
    );

    // 创建提示标签并添加到对话框内容区
    label = gtk_label_new("你确定要执行这个操作吗?");
    box = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
    gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0);
    gtk_widget_show_all(dialog);

    // 运行对话框,等待用户操作
    response = gtk_dialog_run(GTK_DIALOG(dialog));

    // 处理用户响应(示例逻辑)
    switch(response) {
        case GTK_RESPONSE_YES:
            g_print("用户选择了「是」\n");
            break;
        case GTK_RESPONSE_NO:
            g_print("用户选择了「否」\n");
            break;
        default:
            g_print("对话框被直接关闭\n");
            break;
    }

    // 关键:关闭并销毁对话框,释放资源
    gtk_widget_destroy(dialog);

    return response;
}

一些额外的小提示

  • gtk_widget_destroy()会彻底销毁对话框和它的所有子控件,释放占用的内存,对于这种用完就扔的确认对话框,这是最稳妥的选择。
  • 如果之后还需要复用这个对话框,可以先用gtk_widget_hide(dialog)隐藏它,但记得程序退出前一定要调用gtk_widget_destroy()清理,避免内存泄漏。
  • 当你调用gtk_dialog_run()时,对话框会进入模态循环,直到用户做出选择或关闭窗口,之后调用销毁函数是标准的收尾步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:58:24