首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在QML中做"is_a","typeof“或instanceof?

如何在QML中做"is_a","typeof“或instanceof?
EN

Stack Overflow用户
提问于 2012-12-18 07:09:13
回答 2查看 19.4K关注 0票数 33

我想浏览QML组件列表并选择一种类型:

代码语言:javascript
复制
for (var i = 0; i < controls.children.length; ++i) {
     if ( typeof (controls.children[i].height) == "QDeclarativeRectangle")
     {
        // do stuff
     }
}

如何做到这一点呢?

EN

回答 2

Stack Overflow用户

发布于 2018-01-26 19:36:26

从Qt5.10开始,你终于可以使用instanceOf来检查一个变量是否属于某个QML类型,请参阅"QML Support for Enum and InstanceOf Type Checks"

代码语言:javascript
复制
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))
  }
}
票数 26
EN

Stack Overflow用户

发布于 2015-02-07 23:59:58

下面是使用toString()的另一种方法(它可能不能移植到未来版本的QML):

代码语言:javascript
复制
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
   }
}
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13923794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档