根据GTK API参考,GtkAboutDialog的"license-type"属性仅存在于GTK> = 3.0中。出于兼容性考虑,我的代码目前检查设置“牌照型”属性在之前版本的GTK:有没有办法检查一个GTK widget是否支持一个属性而不检查版本号?
-- This is Lua code binding to GTK via lgi
local dialog = Gtk.AboutDialog {
title = "About Me",
-- ...,
}
if Gtk.check_version(3,0,0) == nil then
dialog.license_type = Gtk.License.MIT_X11
end
而不是做这个的,有没有办法直接询问GTK如果一个widget支持一定的财产?我觉得代码会更自我记录和更少的错误,如果容易因为这个问题实际上是关于GTK的API,我与任何编程语言回答OK,我可以写的东西看起来像
if supports_property(dialog, "license-type") then
dialog.license_type = Gtk.License.MIT_X11
end
。虽然这些例子都在Lua中,但我假设类似的问题应该出现在其他动态语言绑定或C中,假设有一种方法可以在不通过访问函数的情况下通过名称来设置属性。
感谢您的回答。不幸的是,我从未设法在Lua中调用“find_property”,因为我使用的Lua接口将所有的类包装在表格中,并且不会暴露“find_property”需要的GObjectClass指针。好消息是我找到了一种解决我的问题的方法(只有Lua)。 – hugomg
很高兴知道。这个解决方案在任何地方记录在lgi中? – andlabs
肯定不知道,我有点自己想清楚了。然而,'_property'表是一个公共API,所以我认为它很好。 – hugomg