我想浏览QML组件列表并选择一种类型:
for (var i = 0; i < controls.children.length; ++i) {
if ( typeof (controls.children[i].height) == "QDeclarativeRectangle")
{
// do stuff
}
}
如何做到这一点呢?
发布于 2018-01-26 19:36:26
从Qt5.10开始,你终于可以使用instanceOf
来检查一个变量是否属于某个QML类型,请参阅"QML Support for Enum and InstanceOf Type Checks"。
import VPlayApps 1.0
import QtQuick 2.0
App {
// two QML items, used for type checking
Item { id: testItem }
Rectangle { id: testRect }
// function to check wheter an item is a Rectangle
function isRectangle(item) {
return item instanceof Rectangle
}
// type check example
Component.onCompleted: {
console.log("testItem is Rectangle? " + isRectangle(testItem))
console.log("testRect is Rectangle? " + isRectangle(testRect))
}
}
发布于 2015-02-07 23:59:58
下面是使用toString()的另一种方法(它可能不能移植到未来版本的QML):
function qmltypeof(obj, className) { // QtObject, string -> bool
// className plus "(" is the class instance without modification
// className plus "_QML" is the class instance with user-defined properties
var str = obj.toString();
return str.indexOf(className + "(") == 0 || str.indexOf(className + "_QML") == 0;
}
...
for (var i = 0; i < controls.children.length; ++i) {
if (qmltypeof(controls.children[i].height, "QDeclarativeRectangle"))
{
// do stuff
}
}
https://stackoverflow.com/questions/13923794
复制相似问题