使用glade的C GTK3程序不显示主窗口

标签 c gtk glade gtkbuilder

我用空地创建了一个用户界面。

当我运行该程序时,它没有给出任何错误,但也没有显示主窗口。它就退出了。

我的完整 UI 文件位于 https://paste.gnome.org/pfxz888er 完整的 C 程序位于 https://paste.gnome.org/p7rxhhbk2

请告诉我我的代码是否有问题。重要部分是:

#include <gtk/gtk.h>
#include <glib.h>
#include <glib/gprintf.h>

static void create (GtkApplication *app, gpointer user_data)
{
GtkBuilder *main_interface;
main_interface = gtk_builder_new_from_file ("/home/aj/learning/front.glade");

//  gtk_builder_connect_signals (main_interface,NULL);
gtk_builder_add_callback_symbol (main_interface,
                             "cb_about",
                             G_CALLBACK(cb_about));

gtk_builder_add_callback_symbol (main_interface,
                             "cb_enc_mode",
                             G_CALLBACK(cb_enc_mode));
..... all other callbacks........

GObject *top_window;
top_window = gtk_builder_get_object (main_interface,
                    "top_window");
gtk_widget_show_all (GTK_WIDGET(top_window));
}

int main (int argc, char *argv[])
{
int status;
GtkApplication *app;
app = gtk_application_new ("org.aj.gui",G_APPLICATION_FLAGS_NONE);
g_signal_connect(app,"activate",G_CALLBACK(create),NULL);
status = g_application_run (G_APPLICATION(app),argc,argv);
g_object_unref (app);
return status;
}

最佳答案

发现问题了。我应该为 GtkApplication 设置窗口。需要额外的代码:

GtkWidget *top_window;
top_window = GTK_WIDGET (gtk_builder_get_object (main_interface,"top_window"));
if (!top_window) {
    g_critical ("Widget \"%s\" is missing in UI file\n",
            "top_window");
}
g_object_unref (main_interface);
gtk_window_set_application (GTK_WINDOW (top_window), GTK_APPLICATION (app));
gtk_widget_show_all (GTK_WIDGET(top_window));

关于使用glade的C GTK3程序不显示主窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34838127/

相关文章:

c - Windows 引擎和主题帮助上的 GTK

c - 迭代器不属于它们分配的文本缓冲区

c - GtkFileChooserDialog gtk_file_chooser_get_filename() 返回 null,即使输入了文件名?

python - pyGTK Glade 警告缺少处理程序

c - C 中的 Trim 函数,用于原地修剪(不返回字符串)

c - 无需按 Enter 键即可读取键盘输入

python - PyGTK,Glade,更改窗口 View 和线程

python - 如何使用 GtkBuilder 重用 glade 文件中的小部件树?

c - 用 Bloodshed 在 C 语言中为文本添加颜色

c - 数组作为函数参数