免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3616 | 回复: 3
打印 上一主题 下一主题

大伙帮忙看看代码有什么问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-07 19:49 |只看该作者 |倒序浏览
我是用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;
}

chmsee.c.zip

1.33 KB, 下载次数: 77

这是源码

see.glade.zip

1.69 KB, 下载次数: 78

这是界面

论坛徽章:
0
2 [报告]
发表于 2008-11-08 18:14 |只看该作者
没人吗?难道?

论坛徽章:
0
3 [报告]
发表于 2008-11-10 11:23 |只看该作者
对话框不是那样用的

        //弹出提示对话框
        int result;
        GtkWidget *dialog;
       
        dialog = gtk_message_dialog_new(GTK_WINDOW(wbus->window),GTK_DIALOG_MODAL,
                                GTK_MESSAGE_WARNING,
                                GTK_BUTTONS_YES_NO,
                                N_("Are you sure you want to exit the system?"));
               
        result = gtk_dialog_run(GTK_DIALOG (dialog));
        switch(result){
                case GTK_RESPONSE_YES:
                        gtk_widget_destroy(dialog);
                        gtk_widget_destroy(wbus->window);
                        return;
                default:
                        break;
        }
       
        gtk_widget_destroy(dialog);

论坛徽章:
0
4 [报告]
发表于 2008-11-12 11:37 |只看该作者
还是不懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP