2016-04-06 18 views
2

プライベートデータGtkWidgetに追加することはできますか?プライベートデータをGtkWidgetに追加することはできますか?

背景:

私は多くのGtkCheckBotton秒を持っている、すべてのこれらのウィジェットは、同じコールバックに接続されています。コールバックでは、私はウィジェットのプライベートデータを扱いたい(または少なくともウィジェットを区別したい)。

例:

// checkbox signal callback 
void on_checkbox_tcoggled(GtkWidget* widget, gpointer data) { 
    MyClass* me = data; 
    MyPrivateData* priv = widget->priv; // ??? 

    MyClass_foo(me, priv); 
} 
+0

@ el.pescadoの答えに私のコメントを見てください。あなたにはいくつかの誤りがあります。 – unwind

+0

@unwindあなたは正しいです、ありがとう! – sergej

+0

GTK(c)とC++を混ぜているので、代わりにgtkmmを使わないのはなぜですか? – Joel

答えて

2

それはGtkWidgetにプライベートデータを追加することは可能ですか?

あなたはどのGObjectに任意のデータを追加するための機能g_object_set_datag_object_get_dataを使用することができます。

MyPrivateData *priv = ... 
g_object_set_data(G_OBJECT(widget), "my private data", priv); 

// ... 

void on_checkbox1_toggled(GtkWidget* widget, gpointer data) { 
    MyClass* me = data; 
    MyPrivateData* priv = (MyPrivateData*) g_object_get_data(G_OBJECT(widget), "my private data"); 

    MyClass_foo(me, priv); 
} 
+0

コールバックの第2引数は 'gpointer'ではなく' gpointer'です。それは単なる 'void * 'なので、キャストは必要ありません。 – unwind

+0

あなたはそうです。私は質問からコードをコピーするときに気付かなかった。 –

+0

多くのおかげで、私はこのソリューションが好き、魅力のように動作します。 – sergej

関連する問題