- 论坛徽章:
- 0
|
我是用glade3画的界面,能编译运行,但某一些部分出现 "Gtk-CRITICAL **: gtk_widget_show: assertion `GTK_IS_WIDGET (widget)' failed"这样的错误请大家看看,那里出问题,谢谢!
code:
#include <gtk/gtk.h>
#include <glade/glade.h>
typedef struct{
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 *un,GtkWidget *dialog)
{
gtk_widget_show(dialog);
}
void delete_event( GtkWidget *widget,GtkWidget *dialog )
{
gtk_widget_destroy(dialog);
}
int main(int argc, char *argv[]) {
GladeXML *xml;
GtkWidget *meun_insert;
GtkWidget *exit_meun;
GtkWidget *color;
GtkWidget *button;
app *p;
p=g_slice_new(app);
gtk_init(&argc, &argv);
p->str="i will be success\n";
xml = glade_xml_new("see.glade", NULL, NULL);
p->textview=glade_xml_get_widget(xml,"textview1");
meun_insert=glade_xml_get_widget(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(xml,"exit");
g_signal_connect(G_OBJECT (exit_meun), "clicked",G_CALLBACK (destory),NULL);
p->statusbar=glade_xml_get_widget(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);
color=glade_xml_get_widget(xml,"chang_color");
p->dialog=glade_xml_get_widget(xml,"colorselectiondialog1");
button=glade_xml_get_widget(xml,"colorsel-ok_button1");
g_signal_connect(G_OBJECT (color), "activate",G_CALLBACK(show),p->dialog);
//-------------
g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (delete_event), p->dialog);
gtk_main();
g_slice_free (app, p);
return 0;
} |
|