0

にアクセスしようとしていますがGTK Widget、現在はウィジェットのどのプロパティでも実行できますが、エラーが発生し続けます:

Gtk-CRITICAL **: IA__FUNCTIONAME: assertion `GTK_IS_WIDGET (widget)' failed

これはこれまでの私のコードであり、関連する部分は次のとおりです。

///////// FILE 1 /////////////////

GtkWidget *textbox1;                        //declared at the top of the file 
GtkTextBuffer *text;

void onscreen (int type, char* key)
{
    if (type == -1) {
        //remove widget
    } 
    else if (type == 1) {
        gtk_widget_destroy(GTK_WIDGET(textbox1));     
        //THE OFFENDING LINE  ^^^
    }
}

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

    /*more code*/

    textbox1 = gtk_text_view_new();
    text = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textbox1));
    GtkTextIter iter;
    gtk_text_buffer_get_iter_at_offset(text, &iter, 0);
    gtk_text_buffer_insert(text, &iter, "plain text\n", -1); 

    vbox = gtk_vbox_new(FALSE, 8);
    gtk_container_add(GTK_CONTAINER(window), vbox);

    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(vbox), zbarwidgets, TRUE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(results), FALSE, FALSE, 0);

    gtk_widget_show_all(window);
    gtk_main();
    return(0);
}

///////// FILE 1 /////////////////

次に、次のように、ファイル 2 の最初の関数を呼び出す別のファイル (ヘッダーなどは正常に含まれています) にさらにコードがあります。

///////// FILE 2 /////////////////

static inline int window_draw (window_t *w) {
    /* do some stuff */
    onscreen(1, sym->data);
    /* do some stuff */
}

///////// FILE 2 /////////////////

ありがとう!

4

1 に答える 1

0

エラーは上記のコードにはありません。他の関数が変更しますtextbox1

また、示されているコードに従ってgtk_widget_get_parent常に返されることに注意してください。NULL

実際gdk_threads_*にスレッド化の問題に遭遇しない限り、なぜそれをしないでください-また、非推奨でもありません(afaik)。

于 2013-09-12T09:04:00.383 に答える