博客
关于我
GTK+-3.0学习笔记(二)——helloworld
阅读量:299 次
发布时间:2019-03-01

本文共 2161 字,大约阅读时间需要 7 分钟。

GTK+-3.0学习笔记(二)——helloworld

在[[GTK+-3.0学习笔记(一)——Basics]]中,我们创建了一个没有任何功能的简单窗口。在本文中,我们将完成一个带有按钮的helloworld窗口程序,并通过点击按钮关闭该窗口和退出程序。

代码解释

以下是用于创建带有按钮的helloworld窗口程序的代码:

#include 
void activate(GtkApplication *app, gpointer data);void printHello(GtkWidget *button, gpointer data);int main(int argc, char *argv[]){ GtkApplication *app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE); g_signal_connect(app, "activate", G_CALLBACK(activate), NULL); int status = g_application_run(G_APPLICATION(app), argc, argv); g_object_unref(app); return status;}void activate(GtkApplication *app, gpointer data){ // 创建窗口 GtkWidget *window = gtk_application_window_new(app); gtk_window_set_title(GTK_WINDOW(window), "Hello, world!"); gtk_window_set_default_size(GTK_WINDOW(window), 200, 300); // 创建按钮容器 GtkWidget *button_box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); gtk_container_add(GTK_CONTAINER(window), button_box); // 创建按钮 GtkWidget *button = gtk_button_new_with_label("Hello world!"); // 绑定点击事件 g_signal_connect(button, "clicked", G_CALLBACK(printHello), NULL); g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_widget_destroy), window); // 添加按钮 gtk_container_add(GTK_CONTAINER(button_box), button); // 展示窗口 gtk_widget_show_all(window);}void printHello(GtkWidget *button, gpointer data){ g_print("Hello, world!\n");}

编译和运行

将上述代码保存为main.c,并使用以下命令编译:

gcc -o main `pkg-config --cflags --libs gtk+-3.0`

运行程序后,您将看到一个带有“Hello world!”标签的按钮。点击按钮后,窗口将关闭并退出程序。

关键点解释

  • 应用程序创建

    • 使用gtk_application_new创建应用程序实例。
    • activate函数连接到应用程序的“activate”信号。
  • 窗口创建

    • 使用gtk_application_window_new创建窗口,并设置窗口标题和默认大小。
  • 按钮容器创建

    • 使用gtk_button_box_new创建按钮容器,并设置其方向为水平排列。
    • 将按钮容器添加到窗口中。
  • 按钮创建

    • 使用gtk_button_new_with_label创建按钮,并设置按钮标签。
  • 事件绑定

    • 使用g_signal_connect将按钮的点击信号连接到printHello函数。
    • 使用g_signal_connect_swapped将按钮的点击信号连接到关闭窗口的函数,确保窗口被正确关闭。
  • 窗口展示

    • 使用gtk_widget_show_all展示窗口和所有子部件。
  • 注意事项

    • 按钮容器方向

      • 如果将GTK_ORIENTATION_HORIZONTAL替换为GTK_ORIENTATION_VERTICAL,按钮将垂直排列。
    • 信号连接

      • g_signal_connectg_signal_connect_swapped的区别在于传递的参数数量。g_signal_connect_swapped只传递一个参数,适用于不需要数据传递的回调函数。

    通过以上步骤,您可以创建一个功能完善的GTK+-3.0应用程序。

    转载地址:http://wyao.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现logistic sigmoid函数(附完整源码)
    查看>>
    Objective-C实现longest Common Substring最长公共子串算法(附完整源码)
    查看>>
    Objective-C实现longest increasing subsequence最长递增子序列算法(附完整源码)
    查看>>
    Objective-C实现longestCommonSubsequence最长公共子序列算法(附完整源码)
    查看>>
    Objective-C实现LongestIncreasingSubsequence最长递增子序列算法(附完整源码)
    查看>>
    Objective-C实现lorenz transformation 洛伦兹变换算法(附完整源码)
    查看>>
    Objective-C实现Lower-Upper Decomposition上下分解算法(附完整源码)
    查看>>
    Objective-C实现LowerCaseConversion小写转换算法(附完整源码)
    查看>>
    Objective-C实现lowest common ancestor最低共同祖先算法(附完整源码)
    查看>>
    Objective-C实现LRU 缓存算法(附完整源码)
    查看>>
    Objective-C实现LRU缓存(附完整源码)
    查看>>
    Objective-C实现LRU(least recently used)算法(附完整源码)
    查看>>
    Objective-C实现lstm prediction预测算法(附完整源码)
    查看>>
    Objective-C实现lucas数列算法(附完整源码)
    查看>>
    Objective-C实现Luhn (Mod 10)Algorithm算法(附完整源码)
    查看>>
    Objective-C实现LZW编码(附完整源码)
    查看>>
    Objective-C实现MAC桌面暗水印(附完整源码)
    查看>>
    Objective-C实现mandelbrot曼德勃罗特集算法(附完整源码)
    查看>>
    Objective-C实现markov chain马尔可夫链算法(附完整源码)
    查看>>
    Objective-C实现MATLAB中Filter函数功能(附完整源码)
    查看>>