2012-03-14 14 views
1

GTKを使用して診断ツールを作成しています。それぞれ異なるウインドウのいくつかのプロパティを、それぞれ独自のウィンドウで監視する必要があります。だから、いくつかの等しいウィンドウを開くことができるはずです。それぞれのウィンドウは、特定のオブジェクトに「添付」されています。たとえばボタンがクリックされると、適切なGTKコールバックが呼び出されます。しかし、すべてのウィンドウが等しいので、どのオブジェクトを変更する必要があるかを確認する自然な方法はありません。どのようにして各ウィンドウをオブジェクトに適切にマッピングできますか? 今はマップを使ってgtkウィンドウからオブジェクトにマッピングしていますが、ハックのように感じます。よりエレガントな方法でオブジェクトに関する情報を引き継ぐことができますか?あなたが機能g_object_setg_object_get(とg_object_set_dataなど)のファミリーを使用できるようにgtkウィンドウをデータにマップする方法

答えて

2

GtkWindowは、GObjectの間接的なサブクラスです。

0

私は上記の解決策を探しているチームの1つです。これまでのところ、私はGvalueオブジェクトを作成し、それをGTKWindow windowに追加したいと思っています。

このウィンドウでボタンを押すと、次のsignalfunctionが使用されている
int pid = 12345; 
GValue val = G_VALUE_INIT; 
g_value_init (&val, G_TYPE_INT); 
g_value_set_int (&val, pid); 
g_object_set (G_OBJECT(window), "pID", &val, NULL); //add to GTKWindow 

extern "C" G_MODULE_EXPORT void onButtonStepClicked(GtkObject* caller, gpointer data){ 
    GValue _pid; 
    GtkWidget* window = gtk_widget_get_toplevel (GTK_WIDGET(caller)); 
    g_object_get_property(G_OBJECT(window), "processID", &_pid); 
    cout << (int)g_value_get_int(&pID) << endl; 
} 

しかし、今、私は自分の端末に警告を得る:

のGLib-GObjectの-WARNING **:g_object_set_valistを:オブジェクトクラスGtkWindow' has no property named pID '

私はしばらくグーグルで、私はまずこのプロパティをクラスにインストールする必要がある例を見つけました。これは理にかなっているのですか?

+0

これは回答のための場所であり質問ではありません。ところで、私はあなたの問題は "pID"プロパティを設定し、 "processID"プロパティを取得しようとしていることです。 – liberforce

+0

これは間違った配置(sry)の質問を編集している間に入力するだけの問題でした。問題はまだ残っています。 しかし、これは正常に動作するはずです。 – sobolog

+0

ドキュメントから、g_object_get_propertyはバインディングにのみ使用されます。代わりに、g_object_getとg_object_setを使用してください。私はGObjectの専門家ではありませんが、取得する前にプロパティを作成する必要があると思います。 GObjectドキュメントのg_object_class_install_propertyおよびg_object_class_install_propertiesを参照してください。 – liberforce

関連する問題