gobject を継承しようとしていますが、とりわけ G_PARAM_CONSTRUCT_ONLY プロパティの値を変更して、次の子クラスが気にする必要がないようにしたいと考えています。
これを示す例を次に示します。GtkComboBox には、デフォルト値が FALSE の「has-entry」という構造のみのプロパティがあります。クラス AI では、クラス B が気にする必要がないように、この値を TRUE に変更したいと考えています。
GtkComboBoxClass <-- AClass <-- BClass
"has-entry" FALSE TRUE
最初の素朴なアプローチは、A の instance_init 関数で g_object_set() を使用することでしたが、役に立ちませんでした。
次のアイデアは、g_object_class_find_property() で GParamSpec を取得し、A の class_init 関数の g_param_value_set_default() でデフォルト値を変更することでした。しかし、これはすべての GtkComboBoxClass 派生オブジェクトのデフォルトを変更すると思います。
私が思いついた最良のアイデア: g_object_class_override_property() が新しい GParamSpec を作成する場合、これを見つけて、A の class_init 関数でデフォルト値を設定できます。しかし、ドキュメンテーションはこれについて一言も漏らしません。
だから私の質問:これはこれを達成するための有効で意図的な方法ですか、それともより良い解決策がありますか?
これまでに試した:
- インスタンス init() 内の g_object_set():
- 起動時に警告なし
- 無効
- GObjectClass->constructor() の g_object_set():
- 起動時に警告なし
- 無効
- 終了時の警告: GtkCellCiew から GtkEntry への無効なキャスト
- GObjectClass->constructed() の g_object_set():
- 開始時の警告: 構築後に設定できません
ありがとうステファン