初始化 GTK [src]

库初始化和主循环

在使用 GTK 之前,你需要使用 gtk_init() 对其进行初始化;这会连接到窗口系统,设置语言环境并执行其他初始化任务。如果发生错误,gtk_init() 会退出应用程序;为了避免这种情况,你可以使用 gtk_init_check(),这允许你从失败的 GTK 初始化中恢复;例如,你可以改为以文本模式启动应用程序。

与大多数 GUI 工具包一样,GTK 使用事件驱动的编程模型。当应用程序无事可做时,GTK 会处于“主循环”中并等待输入。如果用户执行某些操作(比如鼠标点击),那么主循环就会“唤醒”并将事件传递给 GTKGTK 将事件转发到一个或多个小部件。

当小部件接收到事件时,它们经常会发出一个或多个“信号”。通过调用你用 g_signal_connect() 连接到信号的函数,信号会通知你的程序“发生了某些有趣的事情”。连接到信号的函数通常被称为“回调”。

当你的回调被调用时,你通常会执行某些操作 - 例如,当点击打开按钮时,你可能会显示一个 GtkFileChooserDialog。在完成回调后,GTK 就会返回到主循环并等待更多用户输入。

一个简单的 GTK 应用程序的 main() 函数

int
main (int argc, char **argv)
{
 GtkWidget *window;
  // Initialize i18n support with bindtextdomain(), etc.

  // ...

  // Initialize the widget set
  gtk_init ();

  // Create the main window
  window = gtk_window_new ();

  // Set up our GUI elements

  // ...

  // Show the application window
  gtk_window_present (GTK_WINDOW (window));

  // Enter the main event loop, and wait for user interaction
  while (!done)
    g_main_context_iteration (NULL, TRUE);

  // The user lost interest
  return 0;
}

务必注意,如果你使用 GtkApplication,那么应用程序类将负责为你初始化 GTK,以及旋转主循环。

另请参阅

  • GLib 手册,特别是 GMainLoop
  • 与信号相关的函数,比如 GObject 中的 g_signal_connect()