GTK4通过XML创建的窗口调用Run()后立即关闭问题
GTK4窗口显示后立即关闭的问题
根据文档说明,使用g_application_run并执行引用计数递增操作后,窗口应保持打开状态,但我按此操作后,GUI仍会在显示后立即关闭,不清楚问题所在:
GtkBuilder* myGtkBuilder; GtkWidget* myGtkWindow; GtkApplication* myGtkApp; // 由于将使用XML设计文件,传入的'app'参数不会被使用 static void activate_cb(GtkApplication* app, gpointer user_data) { // 从XML文件加载UI myGtkBuilder = gtk_builder_new_from_file("gtk4.glade"); // 从builder中获取窗口部件 myGtkWindow = GTK_WIDGET(gtk_builder_get_object(myGtkBuilder, "window")); // (可选)在此处连接GUI元素的信号(如有需要) // 不使用gtk_widget_set_visible(myGtkWindow, true);来显示窗口 gtk_window_present(GTK_WINDOW(myGtkWindow)); g_object_ref(myGtkWindow); // 增加引用计数 // 清理资源 g_object_unref(myGtkBuilder); } int main(int argc, char *argv[]) { int status; GError* error = NULL; gtk_init(&argc, &argv); // 是否需要? myGtkApp = gtk_application_new("myAppId.id", G_APPLICATION_DEFAULT_FLAGS); // vs gtk_application_window_new? G_APPLICATION_DEFAULT_FLAGS vs G_APPLICATION_FLAGS_NONE g_signal_connect(myGtkApp, "activate", G_CALLBACK(activate_cb), NULL); status = g_application_run(G_APPLICATION(myGtkApp), argc, argv); // 释放资源 g_object_unref(myGtkApp); return status; }
我尝试过多个XML文件,表现均一致:
<?xml version="1.0"?> <interface> <object class="GtkWindow" id="window"> <property name="title">Checkboxes Example</property> <child> <object class="GtkBox" id="box"> <property name="orientation">GTK_ORIENTATION_VERTICAL</property> <child> <object class="GtkCheckButton" id="checkbox1"> <property name="label">Checkbox 1</property> </object> </child> <child> <object class="GtkCheckButton" id="checkbox2"> <property name="label">Checkbox 2</property> </object> </child> </object> </child> </object> </interface>
遗憾的是,Stack Overflow上另外两个类似问题的解决方案对我无效(它们是基于Python的)。
内容的提问来源于stack exchange,提问作者Ben Nguyen
相关产品推荐
相关产品推荐

