我尝试继承一个 gobject,除其他外,还想更改 G_PARAM_CONSTRUCT_ONLY 属性的值,这样下一个子类就不必关心了。
下面是一个描述这一点的例子: GtkComboBox 有一个名为“has-entry”的仅构造属性,默认值为 FALSE。在 AI 类中,想要将此值更改为 TRUE,这样 B 类就不需要关心了。
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 函数中设置它的默认值。但是文档并没有对此一言不发。
所以我的问题是:这是一种可行的、有意的方式来实现这一点,还是有更好的解决方案?
到目前为止尝试过:
- g_object_set() 在实例 init() 中:
- 启动时没有警告
- 没有效果
- GObjectClass->constructor() 中的 g_object_set():
- 启动时没有警告
- 没有效果
- 退出警告:从 GtkCellCiew 到 GtkEntry 的无效转换
- GObjectClass->constructed() 中的 g_object_set():
- 启动警告:构建后无法设置
谢谢斯特凡