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
- gtk学习笔记之简单例子
- GTK学习笔记之Linux下Gtk环境搭建
- gtk学习笔记-gtk入门
- gtk学习笔记-gtk函数
- GTK学习笔记1-简单的控件和事件响应
- 学习GTK+笔记一
- 学习GTK+笔记二
- GTK+学习笔记1
- 一个简单的GTK的例子程序
- GTK学习笔记之盒子布局GtkBox(2)
- GTK学习笔记之网格布局GtkGrid(3)
- GTK学习笔记之固定布局GtkFixed(4)
- GTK学习笔记之响应控件事件(5)
- GTK学习笔记之Linux下Gtk环境搭建(0)
- 学习笔记Java applet简单例子
- 【Boost.Asio学习笔记】简介+简单例子
- jersey学习笔记1-简单的例子
- struts2笔记之 -- JFreeChart插件简单例子
- Java--线程--线程控制,线程安全,线程同步,线程等待,线程交互,死锁,互斥锁,读写锁
- 观察者模式
- Effective C++(1-2) 编译器替换预处理器
- Android Bitmap详细介绍
- 自用cookie缓存对象一例
- gtk学习笔记之简单例子
- Eclipse下svn的创建分支/合并/切换使用
- Ubuntu安装Firefox Flash Player安装方法
- Android深入浅出之Audio 第一部分 AudioTrack分析
- tomcat部署项目的三种方式
- javamail简单文本发送代码及注释
- kilu.de德国免费空间中文乱码解决方法
- 异步,同步,阻塞与非阻塞
- Redis网站