gtk学习笔记之简单例子

来源:互联网 发布:马尔可夫链 知乎 编辑:程序博客网 时间:2024/06/05 12:04

和qt非常相像,基于c语言的 gtk是跨平台的。

#include <cstdlib>//头文件的东西,请根据自己的安装目录设置#include <gtk-2.0/gdk/gdk.h>#include <gtk-2.0/gtk/gtkwidget.h>#include <gtk-2.0/gtk/gtkmain.h>#include <gtk-2.0/gtk/gtkwindow.h>#include <gtk-2.0/gtk/gtkenums.h>#include <gtk-2.0/gtk/gtkstyle.h>#include <gtk-2.0/gdk/gdktypes.h>#include <gtk-2.0/gdk/gdkscreen.h>#include <glib-2.0/glib/gtypes.h>#include <glib-2.0/gobject/gsignal.h>#include <gtk-2.0/gtk/gtktypeutils.h>#include <gtk-2.0/gtk/gtkbutton.h>#include <gtk-2.0/gtk/gtkhbox.h>#include <glib-2.0/glib/gmacros.h>#include <gtk-2.0/gtk/gtkvbox.h>#include <gtk-2.0/gtk/gtkbox.h>#include <gtk-2.0/gtk/gtkcontainer.h>#include <gtk-2.0/gtk/gtktable.h>#include <gtk-2.0/gtk/gtkalignment.h>#include <gtk-2.0/gtk/gtktogglebutton.h>#include <gtk-2.0/gtk/gtkmessagedialog.h>#include <gtk-2.0/gtk/gtkdialog.h>using namespace std;void center001(GtkWidget *widget) {    //居中方法1    gtk_window_position(GTK_WINDOW(widget), GTK_WIN_POS_CENTER_ALWAYS);    gtk_widget_show(widget);}//居中方法2void center002(GtkWidget *widget) {    gtk_widget_show_all(widget);    GdkScreen *screen = gdk_screen_get_default();    gint w = gdk_screen_get_width(screen);    gint h = gdk_screen_get_height(screen);    gint window_w = widget->allocation.width;    gint window_h = widget->allocation.height;    gtk_window_move(GTK_WINDOW(widget), (w - window_w) / 2, (h - window_h) / 2);}void close_app(GtkWidget *widget, gpointer data) {    gtk_main_quit();}void button_leave(GtkWidget *button, gpointer data) {    printf("button leave\n");}void show_info(GtkWidget *widget, gpointer data) {    GtkWidget *dialog;    dialog = gtk_message_dialog_new(GTK_WINDOW(data),            GTK_DIALOG_DESTROY_WITH_PARENT,            GTK_MESSAGE_INFO,            GTK_BUTTONS_OK,"Download Completed", "title");    gtk_window_set_title(GTK_WINDOW(dialog),"Information");    gtk_dialog_run(GTK_DIALOG(dialog));    gtk_widget_destroy(dialog);}void button_pressed(GtkWidget *widget, gpointer data) {    printf("button pressed\n");    //show_info(widget,data);        //显示对话框    GtkWidget *dialog;    dialog = gtk_message_dialog_new(GTK_WINDOW(data), GTK_DIALOG_DESTROY_WITH_PARENT,            GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "系统提示", "你按下来按钮!");    gtk_dialog_run(GTK_DIALOG(dialog));    gtk_widget_destroy(dialog);}void button_clicked() {    printf("button clicked\n");}void toggle_button_callback(GtkWidget *toggle, gpointer data) {    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle))) {        //改变按钮的标签            gtk_button_set_label(GTK_BUTTON(toggle), "toggle button down");    }    else {        gtk_button_set_label(GTK_BUTTON(toggle), "toggle button up");    }}//使用gtk编译参数加上 `pkg-config --cflags --libs gtk+-2.0`int main(int argc, char** argv) {    GtkWidget *widget;    GtkWidget *align;    ////初始化GTK环境        gtk_init(&argc, &argv);    //新建一个顶级窗口    widget = gtk_window_new(GTK_WINDOW_TOPLEVEL);    //在show前初始化参数,//定义窗口的标题        gtk_window_set_title(GTK_WINDOW(widget), "我的第一个gtk程序!");    //设置窗口大小    gtk_window_set_default_size(GTK_WINDOW(widget), 400, 300);    //显示位置在鼠标位置     gtk_window_position(GTK_WINDOW(widget), GTK_WIN_POS_MOUSE);    //center001(widget);    //绑定信号函数,点击退出时执行的操作     g_signal_connect(GTK_OBJECT(widget), "destroy", GTK_SIGNAL_FUNC(close_app), NULL);    GtkWidget *button1;    // GtkWidget *button2;    GtkWidget *button3;    GtkWidget *Hbox;    GtkWidget *Vbox;    button1 = gtk_button_new_with_label("button1");    //button2 = gtk_button_new_with_label("button2");    button3 = gtk_button_new_with_label("关闭");    Hbox = gtk_hbox_new(TRUE, 0);    Vbox = gtk_vbox_new(TRUE, 0);    GtkWidget *table;    table = gtk_table_new(2, 2, TRUE);    //将两个按钮添加到表,button1占第一行的两个单元,button2占第二行的第一个单元        gtk_table_attach(GTK_TABLE(table), button1, 0, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0);    // gtk_table_attach(GTK_TABLE(table), button2, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);    // gtk_container_add(GTK_CONTAINER(widget),table);      GtkWidget *toggle;    //新建一个按钮        toggle = gtk_toggle_button_new_with_label("toggle button up");    gtk_table_attach(GTK_TABLE(table), toggle, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);    g_signal_connect(GTK_OBJECT(toggle), "toggled", G_CALLBACK(toggle_button_callback), NULL);    gtk_box_pack_start(GTK_BOX(Hbox), GTK_WIDGET(table), FALSE, FALSE, 0);    // gtk_box_pack_start(GTK_BOX(Hbox),button1,FALSE,FALSE,0);    // gtk_box_pack_start(GTK_BOX(Hbox),button2,FALSE,FALSE,0);    gtk_box_pack_start(GTK_BOX(Vbox), GTK_WIDGET(Hbox), FALSE, FALSE, 0);    gtk_box_pack_start(GTK_BOX(Vbox), button3, FALSE, FALSE, 0);    align = gtk_alignment_new(0.5, 0.5, 0, 0);    gtk_container_add(GTK_CONTAINER(align), Vbox);    gtk_container_add(GTK_CONTAINER(widget), align);    g_signal_connect(GTK_OBJECT(button3), "clicked", GTK_SIGNAL_FUNC(close_app), NULL);    //鼠标离开按钮时触发leave信号        g_signal_connect(GTK_OBJECT(button1), "leave", G_CALLBACK(button_leave), NULL);    //鼠标按下按钮时触发pressed信号        g_signal_connect(GTK_OBJECT(button1), "pressed", G_CALLBACK(button_pressed), NULL);    //鼠标松开是触发clicked信号        g_signal_connect(GTK_OBJECT(button1), "clicked", G_CALLBACK(button_clicked), NULL);    gtk_widget_show_all(widget);    gtk_main();    printf("ok\n");    return 0;}


 

0 0
原创粉丝点击