为什么 GTK 停止运行其余程序?

问题描述 投票:0回答:1

我有一个 C++ 程序,我在

main()
函数中首先使用了这个简单的 gtk 代码,我的目标是我的应用程序在启动时显示图像,并保持显示图像并保留程序的其余部分。

  GtkWidget* window;
  GtkWidget* image1;
  GtkWidget* image2;

  gtk_init (NULL,NULL);


  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  image1  = gtk_image_new_from_file("1.jpg");
  image2  = gtk_image_new_from_file("2.jpg");

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);


  g_signal_connect(G_OBJECT (window), "destroy",
             G_CALLBACK (destroy), NULL);

  gtk_container_add(GTK_CONTAINER (window), image1);

  gtk_widget_show_all(window);

  gtk_main();

THE REST OF PROGRAM THAT WONT EXECUTE!

但是当它打开一个窗口并显示图像时,它卡在那里并且不执行其余代码!为什么会出现这种情况?

error-handling gtk
1个回答
2
投票

执行

gtk_main
之后,您的代码将“阻塞”,如果我可以这么说的话,在该行中直到
gtk_main_quit
它被调用/执行。

这是图形用户界面的本质。通常,您设置所有内容,调用主循环并等待用户交互。

我建议你阅读 GNOME 的

Getting Started with GTK+
已存档)。

举个例子,如果您在

printf
下面执行任何
gtk_main
,它将在您关闭 GtkWindow 后打印出来。

您的应用程序逻辑必须事先定义,然后通过用户交互、按下按钮和其他小部件,应用程序将执行“操作”。

当您调用

gtk_main
时,主循环开始。

主事件循环管理所有可用的事件源 GLib 和 GTK+ 应用程序。这些事件可以来自任意数量的 不同类型的源,例如文件描述符(普通文件, 管道或套接字)和超时。

您可以在这里阅读更多相关信息:

The Main Event Loop
已存档)。

© www.soinside.com 2019 - 2024. All rights reserved.