首页 > 解决方案 > GTK应用退出时如何设置状态码?

问题描述

我正在编写一个利用 GTK 创建 GUI 的应用程序。

在下面的示例代码中,该函数run_gui启动 GTK 应用程序。

当其中一个事件处理程序出现问题时,我希望 GTK 应用程序关闭,并且我想run_gui知道该应用程序由于失败而关闭。一种自然的方法似乎是在g_application_run返回时返回一个特定的状态码。

我了解到关闭应用程序的合适方法是g_quit_application从事件处理程序中调用(如果不是,请更正)。但是,我想知道如何设置从 返回的状态码g_application_run,以便run_gui对其进行检查并采取相应措施。

代码来说明我想要做什么:

#include <gtk/gtk.h>

static void activate(GtkApplication* app, gpointer user_data) {
    GtkWidget* window = gtk_application_window_new (app);
    gtk_window_set_title(GTK_WINDOW(window), "Window");
    gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
    gtk_widget_show_all(window);

    bool success = do_something();

    if (!success) {
        /* How do I set the exit status of the GTK app? */
        g_application_quit(G_APPLICATION(app));
    }
}

void run_gui(void) {
    GtkApplication* app = gtk_application_new("my.app", G_APPLICATION_FLAGS_NONE);
    g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);

    int status = g_application_run(G_APPLICATION(app), 0, NULL);
    g_object_unref(app);

    if (status == 0) {
        /* Do something about success */
    } else {
        /* Do something about failure */
    }
}

标签: cuser-interfacegtk

解决方案


GApplication 中唯一允许您返回退出代码的部分是GApplication::local_command_line();否则,GApplication 将返回 1 表示任何内部失败,或 0 表示成功。

如果激活后有退出状态,则需要自己处理。

请记住:激活是在当前运行的实例上执行的。只有当前正在运行的进程才会发出激活——任何额外的实例都会立即终止。


推荐阅读