初始化 GTK [src]
库初始化和主循环
在使用 GTK 之前,你需要使用 gtk_init()
对其进行初始化;这会连接到窗口系统,设置语言环境并执行其他初始化任务。如果发生错误,gtk_init()
会退出应用程序;为了避免这种情况,你可以使用 gtk_init_check()
,这允许你从失败的 GTK 初始化中恢复;例如,你可以改为以文本模式启动应用程序。
与大多数 GUI 工具包一样,GTK 使用事件驱动的编程模型。当应用程序无事可做时,GTK 会处于“主循环”中并等待输入。如果用户执行某些操作(比如鼠标点击),那么主循环就会“唤醒”并将事件传递给 GTK。 GTK 将事件转发到一个或多个小部件。
当小部件接收到事件时,它们经常会发出一个或多个“信号”。通过调用你用 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()