根據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