麻烦帮忙调式一下一个gtk程序!谢谢!

软件和网站开发以及相关技术探讨
回复
wfnh
帖子: 84
注册时间: 2008-02-20 11:46
联系:

麻烦帮忙调式一下一个gtk程序!谢谢!

#1

帖子 wfnh » 2008-11-09 15:07

大伙帮忙调式一下程序,错误在show()(小弟猜的),我怎样该都错!!郁闷!
附:用glade3华的界面&&code

#include <gtk/gtk.h>
#include <glade/glade.h>
void delete_event( GtkWidget *widget,GtkWidget *dialog );
typedef struct{
GladeXML *xml;
GtkWidget *textview;
GtkTextBuffer *buffer;
char *str;
GtkWidget *statusbar;
GtkWidget *dialog;
}app;
void destory(GtkWidget *window,gpointer data)
{
gtk_main_quit();
}
void update_statusbar(GtkTextBuffer *buffer,GtkStatusbar *statusbar)
{
gchar *msg;
gint row,col;
GtkTextIter iter;
gtk_statusbar_pop(statusbar, 0);

gtk_text_buffer_get_iter_at_mark(buffer,&iter, gtk_text_buffer_get_insert(buffer));

row = gtk_text_iter_get_line(&iter);
col = gtk_text_iter_get_line_offset(&iter);

msg = g_strdup_printf("Col %d Ln %d", col+1, row+1);

gtk_statusbar_push(statusbar, 0, msg);

g_free(msg);
}
static void mark_set_callback(GtkTextBuffer *buffer,const GtkTextIter *new_location, GtkTextMark *mark,
gpointer data)
{
update_statusbar(buffer, GTK_STATUSBAR(data));
}


void insert(GtkWidget *meun,app *q)
{

GtkTextIter start,end;
//GtkTextBuffer *buffer;
q->buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(q->textview));
gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(q->buffer),&start,&end);//获得buf的开始&结束的位置
gtk_text_buffer_insert(GTK_TEXT_BUFFER(q->buffer),&end,q->str,-1);//在最后插入buf的所有的内容
}
void show(GtkWidget *widget,app *p)
{
p->dialog=glade_xml_get_widget(p->xml,"colorselectiondialog1");//颜色dialog
if(!p->dialog)
{
g_print("error in the fun of show()\n");
exit(1);
}
gtk_widget_show(p->dialog);

}
void delete_event( GtkWidget *widget,GtkWidget *dialog )
{
gtk_widget_destroy(dialog);
g_print("safe in the delete_event()\n");
if(!dialog)
{
g_print("error in the close\n");
exit(1);
}

}


int main(int argc, char *argv[]) {

GtkWidget *meun_insert;
GtkWidget *exit_meun;
GtkWidget *color;
GtkWidget *button;
GtkWidget *meun;
app *p;
p=g_slice_new(app);
gtk_init(&argc, &argv);
p->str="i will be success\n";
p->xml = glade_xml_new("see.glade", NULL, NULL);
p->textview=glade_xml_get_widget(p->xml,"textview1");
meun_insert=glade_xml_get_widget(p->xml,"insert");
p->buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(p->textview));
g_signal_connect(G_OBJECT (meun_insert), "activate",G_CALLBACK (insert),p);
exit_meun=glade_xml_get_widget(p->xml,"exit");
g_signal_connect(G_OBJECT (exit_meun), "clicked",G_CALLBACK (destory),NULL);
p->statusbar=glade_xml_get_widget(p->xml,"statusbar");
g_signal_connect(p->buffer, "changed",G_CALLBACK(update_statusbar), p->statusbar);
g_signal_connect_object(p->buffer, "mark_set",G_CALLBACK(mark_set_callback), p->statusbar, 0);
//以下为颜色选择dialog的代码
color=glade_xml_get_widget(p->xml,"chang_color");//视图->颜色菜单
p->dialog=glade_xml_get_widget(p->xml,"colorselectiondialog1");//颜色dialog

button=glade_xml_get_widget(p->xml,"colorsel-ok_button1");//dialog的确定按钮
g_signal_connect(G_OBJECT (color), "activate",G_CALLBACK(show),p);//call color dialog
//-------------
g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (delete_event), p->dialog);//close color dialog(beta)


gtk_main();
g_slice_free (app, p);
return 0;
}
附件
see.glade.zip
这是界面
(1.69 KiB) 已下载 71 次
chmsee.c.zip
源码
(1.33 KiB) 已下载 84 次
回复