gtk学习笔记之简单例子

和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);
}
//居中方法2

void 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值