目前共有5篇帖子。 内容转换:不转换▼
 
点击 回复
427 4
【程序】创建带有一个按钮的窗口,并向控制台输出文字
一派护法 十九级
1楼 发表于:2016-8-25 16:08
【window.c】
#include <gtk/gtk.h>

int number = 0;
GtkWidget *window;

void print_hello(GtkWidget *widget, gpointer data)
{
    int *p = (int *)data; // gpointer = void *
    g_print("Hello World! n=%d\n", *p);
    if (*p == 5)
        gtk_widget_destroy(window);
    else
        (*p)++;
}

void activate(GtkApplication *app, gpointer user_data)
{
    GtkWidget *button, *button_box;
   
    window = gtk_application_window_new(app);
    gtk_window_set_title(GTK_WINDOW(window), "Window");
    gtk_window_set_default_size(GTK_WINDOW(window), 640, 480);
   
    button_box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
    gtk_container_add(GTK_CONTAINER(window), button_box);
   
    button = gtk_button_new_with_label("Hello World");
    g_signal_connect(button, "clicked", G_CALLBACK(print_hello), &number);
    //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);
}

int main(int argc, char **argv)
{
    GtkApplication *app;
    int status;
   
    app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE);
    g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
    status = g_application_run(G_APPLICATION(app), argc, argv);
    g_object_unref(app);
    return status;
}
一派护法 十九级
2楼 发表于:2016-8-25 16:09
【Makefile】
window: window.c
    gcc `pkg-config --cflags gtk+-3.0` window.c -o window `pkg-config --libs gtk+-3.0`
一派护法 十九级
3楼 发表于:2016-8-25 16:10
在Fedora24下编译只需要事先安装gtk3-devel:
$ sudo dnf install gtk3-devel
一派护法 十九级
4楼 发表于:2016-8-25 16:12
【程序控制台输出】
$ ./window
Hello World! n=0
Hello World! n=1
Hello World! n=2
Hello World! n=3
Hello World! n=4
Hello World! n=5
【本文参考资料】
https://developer.gnome.org/gtk3/stable/gtk-getting-started.html
一派护法 十九级
5楼 发表于:2016-8-25 16:20
【窗口截图】

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:427 回复数:4
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2016-8-25 16:20
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。