其他物聯網感知方面內容見:目錄
gtk框架
#include <gtk/gtk.h>
int main(int argc,char *argv[])
{
gtk_init(&argc,*argv);
gtk_main();
return 0;
}
使用gtk創建一個窗口
#include <gtk/gtk.h>
int main(int argc,char *argv[])
{
// 初始化gtk
gtk_init(&argc,&argv);
//寫的代碼
//創建一個窗口 返回一個窗口控件的地址
GtkWidget * win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
//設置窗口的標題 參數1 窗口的地址 參數2 標題 字符串
//gtk_window_set_title( GtkWindow *,char *)
gtk_window_set_title((GtkWindow *)win,"千鋒and山科大");
//設置窗口的大小
gtk_widget_set_size_request(win,600,400);
gtk_window_set_resizable((GtkWindow*)win,FALSE);//設置不可伸縮
gtk_widget_show_all(win);//顯示一個控件 參數是控件的地址
// 主事件循環
gtk_main();//作用是讓程序阻塞 捕捉事件
return 0;
}
按鈕
#include <gtk/gtk.h>
#include <stdio.h>
int main(int argc,char *argv[])
{
// 初始化gtk
gtk_init(&argc,&argv);
//寫的代碼
//創建一個窗口 返回一個窗口控件的地址
GtkWidget * win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
//設置窗口的標題 參數1 窗口的地址 參數2 標題 字符串
//gtk_window_set_title( GtkWindow *,char *)
gtk_window_set_title((GtkWindow *)win,"千鋒and山科大");
//設置窗口的大小
gtk_widget_set_size_request(win,600,400);
gtk_window_set_resizable((GtkWindow*)win,FALSE);
//創建一個帶label的按鈕
GtkWidget * button = gtk_button_new_with_label("千鋒");
//按鈕添加到窗口
gtk_container_add( (GtkContainer*)win,button);
const gchar * str = gtk_button_get_label( (GtkButton*)button);
printf("str=%s\n",str);
gtk_widget_show_all(win);//顯示一個控件 參數是控件的地址
// 主事件循環
gtk_main();//作用是讓程序阻塞 捕捉事件
return 0;
}
- 實現效果
信號回調機制
- 當控件被事件(鼠標,鍵盤)觸發,就會產生信號,我們可以設置信號與回調函數的機制
- 當信號產生,那麼就會自動調用回調函數,這個回調函數的形參是什麼樣子,需要查看文檔
#include <gtk/gtk.h>
#include <stdio.h>
void cb( GtkButton *button,gpointer data)
{
GtkWindow *wind = (GtkWindow*)data;
gtk_window_set_title(wind,"千鋒物聯網");
const gchar *str = gtk_button_get_label(button);
printf("str=%s\n",str);
printf("hello button\n");
}
void cb1( GtkButton *button,gpointer data)//data = &num
{
int *p = (int*)data;
printf("%d\n",*p);
printf("hehe\n");
}
int main(int argc,char *argv[])
{
// 初始化gtk
gtk_init(&argc,&argv);
int num=1000;
//寫的代碼
//創建一個窗口 返回一個窗口控件的地址
GtkWidget * win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
//設置窗口的標題 參數1 窗口的地址 參數2 標題 字符串
//gtk_window_set_title( GtkWindow *,char *)
gtk_window_set_title((GtkWindow *)win,"千鋒and山科大");
//設置窗口的大小
gtk_widget_set_size_request(win,600,400);
gtk_window_set_resizable((GtkWindow*)win,FALSE);
//創建一個帶label的按鈕
GtkWidget * button = gtk_button_new_with_label("千鋒");
//按鈕添加到窗口
gtk_container_add( (GtkContainer*)win,button);
const gchar * str = gtk_button_get_label( (GtkButton*)button);
printf("str=%s\n",str);
//註冊信號與回調函數的機制
g_signal_connect(button,"pressed",G_CALLBACK(cb),win);
g_signal_connect(button,"pressed",G_CALLBACK(cb1),&num);
g_signal_connect(win,"destroy",G_CALLBACK(gtk_main_quit),NULL);
gtk_widget_show_all(win);//顯示一個控件 參數是控件的地址
// 主事件循環
gtk_main();//作用是讓程序阻塞 捕捉事件
return 0;
}
水平佈局和垂直佈局
- 水平佈局
#include <stdio.h>
#include <gtk/gtk.h>
int main(int argc, char *argv[])
{
gtk_init(&argc,&argv);
//創建並且設置窗口
GtkWidget *win = gtk_window_new(GTK_WINDOW_TOPLEVEL);//創建窗口
gtk_window_set_title((GtkWindow *)win,"hbox");//設置窗口的標題
gtk_widget_set_size_request(win,400,300);//設置窗口的大小
gtk_window_set_resizable((GtkWindow *)win,FALSE);//設置不可伸縮
// 創建三個帶標籤的按鈕
GtkWidget * button1 = gtk_button_new_with_label("c");
GtkWidget * button2 = gtk_button_new_with_label("c++");
GtkWidget * button3 = gtk_button_new_with_label("java");
//創建水平佈局控件
GtkWidget *hbox = gtk_hbox_new(TRUE,5);
//將按鈕添加到hbox
gtk_container_add((GtkContainer*)hbox,button1);
gtk_container_add((GtkContainer*)hbox,button2);
gtk_container_add((GtkContainer*)hbox,button3);
//將hbox添加到win
gtk_container_add((GtkContainer*)win,hbox);
// 顯示
gtk_widget_show_all(win);
gtk_main();
return 0;
}
- 實現效果:
- 垂直佈局
#include <stdio.h>
#include <gtk/gtk.h>
int main(int argc, char *argv[])
{
gtk_init(&argc,&argv);
//創建並且設置窗口
GtkWidget *win = gtk_window_new(GTK_WINDOW_TOPLEVEL);//創建窗口
gtk_window_set_title((GtkWindow *)win,"vbox");//設置窗口的標題
gtk_widget_set_size_request(win,400,300);//設置窗口的大小
gtk_window_set_resizable((GtkWindow *)win,FALSE);//設置不可伸縮
// 創建三個帶標籤的按鈕
GtkWidget * button1 = gtk_button_new_with_label("c");
GtkWidget * button2 = gtk_button_new_with_label("c++");
GtkWidget * button3 = gtk_button_new_with_label("java");
//創建水平佈局控件
GtkWidget *vbox = gtk_vbox_new(TRUE,5);
//將按鈕添加到hbox
gtk_container_add((GtkContainer*)vbox,button1);
gtk_container_add((GtkContainer*)vbox,button2);
gtk_container_add((GtkContainer*)vbox,button3);
//將hbox添加到win
gtk_container_add((GtkContainer*)win,vbox);
// 顯示
gtk_widget_show_all(win);
gtk_main();
return 0;
}
- 實現效果
表格佈局
#include <stdio.h>
#include <gtk/gtk.h>
int main(int argc, char *argv[])
{
gtk_init(&argc,&argv);
//創建並且設置窗口
GtkWidget *win = gtk_window_new(GTK_WINDOW_TOPLEVEL);//創建窗口
gtk_window_set_title((GtkWindow *)win,"vbox");//設置窗口的標題
gtk_widget_set_size_request(win,400,300);//設置窗口的大小
gtk_window_set_resizable((GtkWindow *)win,FALSE);//設置不可伸縮
// 創建三個帶標籤的按鈕
GtkWidget * button1 = gtk_button_new_with_label("c");
GtkWidget * button2 = gtk_button_new_with_label("c++");
GtkWidget * button3 = gtk_button_new_with_label("java");
//設置按鈕背景透明
gtk_button_set_relief((GtkButton*)button1,GTK_RELIEF_NONE);
gtk_button_set_relief((GtkButton*)button2,GTK_RELIEF_NONE);
gtk_button_set_relief((GtkButton*)button3,GTK_RELIEF_NONE);
//創建一個表格佈局
GtkWidget *table = gtk_table_new(2,2,TRUE);
//將按鈕條件到表格
gtk_table_attach_defaults( (GtkTable*)table,button1,0,1,0,1);
gtk_table_attach_defaults( (GtkTable*)table,button2,1,2,0,1);
gtk_table_attach_defaults( (GtkTable*)table,button3,0,2,1,2);
//將表格添加到win
gtk_container_add((GtkContainer*)win,table);
// 顯示
gtk_widget_show_all(win);
gtk_main();
return 0;
}
- 實現效果
固定佈局
#include <stdio.h>
#include <gtk/gtk.h>
int main(int argc, char *argv[])
{
gtk_init(&argc,&argv);
//創建並且設置窗口
GtkWidget *win = gtk_window_new(GTK_WINDOW_TOPLEVEL);//創建窗口
gtk_window_set_title((GtkWindow *)win,"vbox");//設置窗口的標題
gtk_widget_set_size_request(win,400,300);//設置窗口的大小
gtk_window_set_resizable((GtkWindow *)win,FALSE);//設置不可伸縮
// 創建三個帶標籤的按鈕
GtkWidget * button1 = gtk_button_new_with_label("c");
GtkWidget * button2 = gtk_button_new_with_label("c++");
GtkWidget * button3 = gtk_button_new_with_label("java");
//設置按鈕大小
gtk_widget_set_size_request(button1,80,50);
gtk_widget_set_size_request(button2,80,50);
gtk_widget_set_size_request(button3,80,50);
//創建一個固定佈局
GtkWidget * fixed = gtk_fixed_new();
//將按鈕添加到固定佈局
gtk_fixed_put((GtkFixed *)fixed ,button1,80,100);
gtk_fixed_put((GtkFixed *)fixed ,button2,240,100);
gtk_fixed_put((GtkFixed *)fixed ,button3,160,200);
//將fixed添加到win
gtk_container_add((GtkContainer*)win,fixed);
// 顯示
gtk_widget_show_all(win);
gtk_main();
return 0;
}
- 實現效果