c - 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 */
}
}
解决方案
GApplication 中唯一允许您返回退出代码的部分是GApplication::local_command_line()
;否则,GApplication 将返回 1 表示任何内部失败,或 0 表示成功。
如果激活后有退出状态,则需要自己处理。
请记住:激活是在当前运行的实例上执行的。只有当前正在运行的进程才会发出激活——任何额外的实例都会立即终止。
推荐阅读
- mongodb - 如何绕过 mongoDB 中的 $filter?
- android-studio - 自定义 'fontFamily' 在 Flutter 中不起作用
- quandl - 如何使用 Zipline 从 quantopian-quandl 数据包中检索现金红利?
- html - W3C 验证器的问题
- django - djoser 重置密码不断返回 403 禁止
- c# - 如何将键盘和鼠标输入写入端口
- compilation - 任何人都可以编译label_wav.cc文件
- postgresql - 如何将 postgresql JSONB 列转换为数组列
- python - InvalidArgumentError : indices[6,0] = 88140 is not in [0, 10000) [[node functional_5/embedding_4/embedding_lookup
- php - 将表值加载到弹出列表中,当前值正确显示