qml中QtObject类型的用法小结

 更新时间:2024年01月30日 10:48:46   作者:@十三阿哥  
QtObject 类型是一个非可视元素,仅包含objectName属性,如果需要一个非常轻量级的类型来包含一组自定义属性,那么创建一个QtObject,本文给大家介绍qml中QtObject类型的使用,感兴趣的朋友一起看看吧

一、描述

QtObject 类型是一个非可视元素,仅包含 objectName 属性。
如果需要一个非常轻量级的类型来包含一组自定义属性,那么创建一个 QtObject 会很合适:

import QtQuick 2.0
Item 
{
    QtObject 
    {
        id: attributes
        property string name
        property int size
        property variant attributes
    }
    Text { text: attributes.name }
}

它对于 C++ 集成也很有用,因为它继承自 QObject。

二、属性成员

objectName : string

此属性保存对象实例的 QObject::objectName。
这允许 C++ 应用程序使用 QObject::findChild() 方法在 QML 组件中定位项目。
例如,以下 C++ 应用程序定位子 Rectangle 项并动态更改其颜色值:

// MyRect.qml
import QtQuick 2.0
Item 
{
    width: 200; height: 200
    Rectangle 
    {
        anchors.fill: parent
        color: "red"
        objectName: "myRect"
    }
}
// main.cpp
QQuickView view;
view.setSource(QUrl::fromLocalFile("MyRect.qml"));
view.show();
QQuickItem *item = view.rootObject()->findChild<QQuickItem*>("myRect");
if (item)
    item->setProperty("color", QColor(Qt::yellow));

三、其他

私有化,,,来看以下例子

// MyRectangle .qml

import QtQuick 2.0
import QtQml 2.12
Rectangle {
    id: rect
    width: 100
    height: 100
    color: "green"
    Component.onCompleted: {
        console.log(attributes.usrName)
    }
    property string hobby: ""
    property alias attr: attributes
    QtObject {
        id: attributes
        property string usrName: "zhangSan"
    }
}

// main.qml

import QtQuick 2.0
import QtQuick.Controls 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.3
import QtQml 2.12
Window {
    visible: true
    width: 800
    height: 480
    title: qsTr("Hello World")
    Row {
        MyRectangle {
            hobby: "play games..."
            Component.onCompleted: {
                attr.usrName = "zhangSan"
                console.log(attr.usrName)
            }
        }
    }
}

MyRectangle组件中的 hobby属性可以直接访问赋值,例如在main.qml中 MyRectangle{ hobby: “xxx” … }。
但是如何使其不能被访问 呢???
就可以将其放置在QtObject类型中。例如,MyRectangle.qml中:

QtObject {
    id: attributes
    property string usrName: "zhangSan"
}

此时,在main.qml中就不能直接通过 MyRectangle { usrName: “xxx” }这种形式访问赋值了,否则报错如下:
qrc:/main.qml:17 Cannot assign to non-existent property “usrName”

// main.qml
 Row {
     MyRectangle {
		hobby: "play games..."
         usrName: "zzzz"	// 错误,
         Component.onCompleted: {
             attr.usrName = "zhangSan"
             console.log(attr.usrName)
         }
     }
 }

起到了一种类似私有化的作用(仅限在MyRectangle.qml中访问)。

注意:当然,以上私有化也不是绝对的。。
如果确实需要在main.qml中定义的MyRectangle类型中访问usrName属性,
可以事先在MyRectangle.qml中对QtObject类型进行别名设置,例如

property alias attr: attributes

此时,就可以main.qml中访问了,,,例如

Component.onCompleted: {
    attr.usrName = "zhangSan"
    console.log(attr.usrName)
}

到此这篇关于qml中QtObject类型的使用的文章就介绍到这了,更多相关qml QtObject类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c语言中字符串分割函数及实现方法

    c语言中字符串分割函数及实现方法

    下面小编就为大家带来一篇c语言中字符串分割函数及实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • Lambda表达式里面修改外部变量问题

    Lambda表达式里面修改外部变量问题

    这篇文章主要介绍了Lambda表达式里面修改外部变量的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • C++11中的智能指针和垃圾回收使用

    C++11中的智能指针和垃圾回收使用

    本文主要介绍了C++11中的智能指针和垃圾回收使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • C++中gSOAP的使用详解

    C++中gSOAP的使用详解

    这篇文章主要介绍了C++中gSOAP的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-11-11
  • 基于C++中常见内存错误的总结

    基于C++中常见内存错误的总结

    本篇文章是对C++中常见的内存错误进行了总结介绍。需要的朋友参考下
    2013-05-05
  • C++中的编译与链接

    C++中的编译与链接

    这篇文章主要介绍了C++中的编译与链接,编译型语言SHI c++最大的优点,相比于Python这种解释型语言,C++在编译阶段就进行了许多处理,在执行阶段便具有高效性,下面我们就来详细讲解该内容吧
    2021-12-12
  • C++中实现把表的数据导出到EXCEL并打印实例代码

    C++中实现把表的数据导出到EXCEL并打印实例代码

    这篇文章主要介绍了实现把表的数据导出到EXCEL并打印实例代码的相关资料,需要的朋友可以参考下
    2017-04-04
  • C++ using 编译指令与名称冲突问题

    C++ using 编译指令与名称冲突问题

    using 编译指令由名称空间名和它前面的关键字 using namespace 组成,它使名称空间中的所有名称都可用,而不需要使用作用域解析运算符,这篇文章主要介绍了C++ using 编译指令与名称冲突,需要的朋友可以参考下
    2022-11-11
  • C语言关键字auto与register及static专项详解

    C语言关键字auto与register及static专项详解

    这篇文章主要解释了c语言中什么是数据类型,什么是变量,他们的真正含义是什么。分析了属性关键字auto,register和static的用法
    2022-07-07
  • 成员初始化列表与构造函数体中的区别详细解析

    成员初始化列表与构造函数体中的区别详细解析

    无论是在构造函数初始化列表中初始化成员,还是在构造函数体中对它们赋值,最终结果是相同的。不同之处在于,使用构造函数初始化列表的版本初始化数据成员,没有定义初始化列表的构造函数版本在构造函数体中对数据成员赋值
    2013-09-09

最新评论