关于gtk和glade,请高手指点
时间:2011-06-07
来源:互联网
#include <gtk/gtk.h>
#include <glib.h>
int flag=1;
typedef struct
{
guint no;
gchar packtype[10];
gchar srcmac[100];
gchar srcip[100];
guint srcport;
gchar destmac[100];
gchar destip[100];
guint destport;
guint datalength;
}Pack;
enum
{
COLUMN_NO,
COLUMN_PACKTYPE,
COLUMN_SRCMAC,
COLUMN_SRCIP,
COLUMN_SRCPORT,
COLUMN_DESTMAC,
COLUMN_DESTIP,
COLUMN_DESTPORT,
COLUMN_DATALENGTH,
NUM_COLUMNS
};
static GtkWidget* treeview;
static Pack pack={2,"UDP", "S3-JS-3J-4G-43-34","123.342.342.343",324324,"F3-DS-32-4G-43-34","234.432.53.324", 435, 34};
static void init_list(GtkTreeView* treeview)
{
GtkCellRenderer* cell_renderer;
GtkTreeViewColumn* column;
GtkListStore *store;
/*在treeview中添加一新列,并设置其属性*/
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( "NO",
cell_renderer,
"text",
COLUMN_NO,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( "PACK TYPE",
cell_renderer,
"text",
COLUMN_PACKTYPE,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( " SOURCE MAC",
cell_renderer,
"text",
COLUMN_SRCMAC,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( " SOURCE IP",
cell_renderer,
"text",
COLUMN_SRCIP,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( "SRCPORT",
cell_renderer,
"text",
COLUMN_SRCPORT,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( " DEST MAC",
cell_renderer,
"text",
COLUMN_DESTMAC,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( " DEST IP",
cell_renderer,
"text",
COLUMN_DESTIP,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( "DESTPORT",
cell_renderer,
"text",
COLUMN_DESTPORT,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( "DATASIZE",
cell_renderer,
"text",
COLUMN_DATALENGTH,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
/*创建list store*/
store = gtk_list_store_new (NUM_COLUMNS,
G_TYPE_UINT,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_UINT,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_UINT,
G_TYPE_UINT);
gtk_tree_view_set_model(GTK_TREE_VIEW (treeview), GTK_TREE_MODEL(store));
g_object_unref(store);
return;
}
static void add_to_list(GtkTreeView* treeview, Pack data)
{
GtkListStore *store;
GtkTreeIter iter;
store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(treeview)));
gtk_list_store_append(store, &iter);
gtk_list_store_set (store, &iter,
COLUMN_NO, data.no,
COLUMN_PACKTYPE, data.packtype,
COLUMN_SRCMAC, data.srcmac,
COLUMN_SRCIP, data.srcip,
COLUMN_SRCPORT, data.srcport,
COLUMN_DESTMAC, data.destmac,
COLUMN_DESTIP, data.destip,
COLUMN_DESTPORT,data.destport,
COLUMN_DATALENGTH,data.datalength,
-1);
}
static void start(GtkWidget *widget,gpointer data)
{
g_print("Start\n");
flag=0;
while(flag==0)
{
add_to_list(GTK_TREE_VIEW (treeview),pack);
}
}
static void stop(GtkWidget *widget,gpointer data)
{
g_print("Stop\n");
flag=1;
}
int main (int argc, char* argv[])
{
GtkWidget* window;
GtkWidget* vbox,*hbox;
GtkWidget* button;
GtkWidget* scrolledwindow;
//static GtkWidget* treeview;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Sniffer");
vbox = gtk_vbox_new (FALSE, 5);
gtk_widget_show (vbox);
gtk_container_add (GTK_CONTAINER (window), vbox);
hbox=gtk_hbox_new(FALSE,30);
//gtk_container_add(GTK_CONTAINER(vbox),hbox);
gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,TRUE,0);
button=gtk_button_new_with_label("Start");
gtk_signal_connect(GTK_OBJECT(button),"clicked",G_CALLBACK(start),NULL);
gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,TRUE,0);
button=gtk_button_new_with_label("Stop");
gtk_signal_connect(GTK_OBJECT(button),"clicked",G_CALLBACK(stop),NULL);
gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,TRUE,0);
scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_show (scrolledwindow);
gtk_box_pack_start (GTK_BOX (vbox),scrolledwindow, TRUE, TRUE, 0);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_SHADOW_IN);
treeview = gtk_tree_view_new ();
//gtk_widget_show (treeview);
gtk_container_add (GTK_CONTAINER (scrolledwindow), treeview);
/*设置为FALSE,headers隐藏*/
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), TRUE);
init_list(GTK_TREE_VIEW (treeview));
/*treeview连接model,绑定model和view*/
gtk_window_set_default_size (GTK_WINDOW (window), 850, 400);
gtk_widget_show_all(window);
gtk_main ();
return 0;
}
上面是我写源程序,本来想实现功能:按buttonstart会不停的在显示框里显示数据pack,按button stop会停止显示。其中button start回调函数如下,
static void start(GtkWidget *widget,gpointer data)
{
g_print("Start\n");
flag=0;
while(flag==0)
{
add_to_list(GTK_TREE_VIEW (treeview),pack);
}
}使用while就是不在显示框里面显示数据,程序就好象死了一样,第一次学习写的GTK,不知道哪里出问题了,难道是要用多线程?
求高手指导。。
#include <glib.h>
int flag=1;
typedef struct
{
guint no;
gchar packtype[10];
gchar srcmac[100];
gchar srcip[100];
guint srcport;
gchar destmac[100];
gchar destip[100];
guint destport;
guint datalength;
}Pack;
enum
{
COLUMN_NO,
COLUMN_PACKTYPE,
COLUMN_SRCMAC,
COLUMN_SRCIP,
COLUMN_SRCPORT,
COLUMN_DESTMAC,
COLUMN_DESTIP,
COLUMN_DESTPORT,
COLUMN_DATALENGTH,
NUM_COLUMNS
};
static GtkWidget* treeview;
static Pack pack={2,"UDP", "S3-JS-3J-4G-43-34","123.342.342.343",324324,"F3-DS-32-4G-43-34","234.432.53.324", 435, 34};
static void init_list(GtkTreeView* treeview)
{
GtkCellRenderer* cell_renderer;
GtkTreeViewColumn* column;
GtkListStore *store;
/*在treeview中添加一新列,并设置其属性*/
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( "NO",
cell_renderer,
"text",
COLUMN_NO,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( "PACK TYPE",
cell_renderer,
"text",
COLUMN_PACKTYPE,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( " SOURCE MAC",
cell_renderer,
"text",
COLUMN_SRCMAC,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( " SOURCE IP",
cell_renderer,
"text",
COLUMN_SRCIP,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( "SRCPORT",
cell_renderer,
"text",
COLUMN_SRCPORT,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( " DEST MAC",
cell_renderer,
"text",
COLUMN_DESTMAC,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( " DEST IP",
cell_renderer,
"text",
COLUMN_DESTIP,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( "DESTPORT",
cell_renderer,
"text",
COLUMN_DESTPORT,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
cell_renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes( "DATASIZE",
cell_renderer,
"text",
COLUMN_DATALENGTH,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
/*创建list store*/
store = gtk_list_store_new (NUM_COLUMNS,
G_TYPE_UINT,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_UINT,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_UINT,
G_TYPE_UINT);
gtk_tree_view_set_model(GTK_TREE_VIEW (treeview), GTK_TREE_MODEL(store));
g_object_unref(store);
return;
}
static void add_to_list(GtkTreeView* treeview, Pack data)
{
GtkListStore *store;
GtkTreeIter iter;
store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(treeview)));
gtk_list_store_append(store, &iter);
gtk_list_store_set (store, &iter,
COLUMN_NO, data.no,
COLUMN_PACKTYPE, data.packtype,
COLUMN_SRCMAC, data.srcmac,
COLUMN_SRCIP, data.srcip,
COLUMN_SRCPORT, data.srcport,
COLUMN_DESTMAC, data.destmac,
COLUMN_DESTIP, data.destip,
COLUMN_DESTPORT,data.destport,
COLUMN_DATALENGTH,data.datalength,
-1);
}
static void start(GtkWidget *widget,gpointer data)
{
g_print("Start\n");
flag=0;
while(flag==0)
{
add_to_list(GTK_TREE_VIEW (treeview),pack);
}
}
static void stop(GtkWidget *widget,gpointer data)
{
g_print("Stop\n");
flag=1;
}
int main (int argc, char* argv[])
{
GtkWidget* window;
GtkWidget* vbox,*hbox;
GtkWidget* button;
GtkWidget* scrolledwindow;
//static GtkWidget* treeview;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Sniffer");
vbox = gtk_vbox_new (FALSE, 5);
gtk_widget_show (vbox);
gtk_container_add (GTK_CONTAINER (window), vbox);
hbox=gtk_hbox_new(FALSE,30);
//gtk_container_add(GTK_CONTAINER(vbox),hbox);
gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,TRUE,0);
button=gtk_button_new_with_label("Start");
gtk_signal_connect(GTK_OBJECT(button),"clicked",G_CALLBACK(start),NULL);
gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,TRUE,0);
button=gtk_button_new_with_label("Stop");
gtk_signal_connect(GTK_OBJECT(button),"clicked",G_CALLBACK(stop),NULL);
gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,TRUE,0);
scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_show (scrolledwindow);
gtk_box_pack_start (GTK_BOX (vbox),scrolledwindow, TRUE, TRUE, 0);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_SHADOW_IN);
treeview = gtk_tree_view_new ();
//gtk_widget_show (treeview);
gtk_container_add (GTK_CONTAINER (scrolledwindow), treeview);
/*设置为FALSE,headers隐藏*/
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), TRUE);
init_list(GTK_TREE_VIEW (treeview));
/*treeview连接model,绑定model和view*/
gtk_window_set_default_size (GTK_WINDOW (window), 850, 400);
gtk_widget_show_all(window);
gtk_main ();
return 0;
}
上面是我写源程序,本来想实现功能:按buttonstart会不停的在显示框里显示数据pack,按button stop会停止显示。其中button start回调函数如下,
static void start(GtkWidget *widget,gpointer data)
{
g_print("Start\n");
flag=0;
while(flag==0)
{
add_to_list(GTK_TREE_VIEW (treeview),pack);
}
}使用while就是不在显示框里面显示数据,程序就好象死了一样,第一次学习写的GTK,不知道哪里出问题了,难道是要用多线程?
求高手指导。。
作者: leebug 发布时间: 2011-06-07
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28