[英]Qml property hooks
假設存在一個名為Test
且具有foo
屬性的Qml類型,其實現方式如下: Test.qml
// Not necessarily QtObject, but derived from QObject
QtObject {
// Not necessarily var/property, but must behave like property (i.e. be accessible using "<instance>.foo")
property var foo
}
並以以下方式使用: main.qml
import "."
Test {
id: _test
}
function baz() {
var x = _test.foo;
_test.foo = x;
}
我想要的是每次getter或setter訪問foo
屬性時都會收到通知。 對於二傳手,也許我可以使用fooChanged
信號,但是對於getter沒有這樣的解決方案。 我也可以使用Q_PROPERTY
宏將Test
類型實現為C++
類,並從屬性getter / setter發出相應的信號,但是我真的很想將大多數代碼留在Qml方面。
還有其他方法可以掛接Qml屬性訪問嗎?
好的,經過幾個小時的搜索,閱讀了Qml和JS文檔后,我想我終於找到了解決方案。 由於Qml不完全支持JS,因此涉及一些黑客,但是此解決方案仍然有效。 主要思想是使用JS defineProperty
方法,以便向現有對象動態添加屬性。 現在我的Test.qml
文件如下所示:
QtObject {
// NOTE: .defineProperty does not correctly work for Qml objects, so JS object is used instead
property var object: { return {}; }
Component.onCompleted: {
Object.defineProperty(
object,
"foo",
{
get: function () {
// getter handling here
},
set: function (value) {
// setter handling here
}
}
);
}
}
而在main.qml
_test
情況聲明如下:
property alias _test: _testDeclaration.object
Test {
id: _testDeclaration
}
希望這個答案對其他人有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.