qml中QtObject类型的用法小结

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

脚本之家 / 编程助手:解决程序员“几乎”所有问题!
脚本之家官方知识库 → 点击立即使用

一、描述

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

1
2
3
4
5
6
7
8
9
10
11
12
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 项并动态更改其颜色值:

1
2
3
4
5
6
7
8
9
10
11
12
// MyRect.qml
import QtQuick 2.0
Item
{
    width: 200; height: 200
    Rectangle
    {
        anchors.fill: parent
        color: "red"
        objectName: "myRect"
    }
}
1
2
3
4
5
6
7
// 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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中:

1
2
3
4
QtObject {
    id: attributes
    property string usrName: "zhangSan"
}

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

1
2
3
4
5
6
7
8
9
10
11
// 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类型进行别名设置,例如

1
property alias attr: attributes

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

1
2
3
4
Component.onCompleted: {
    attr.usrName = "zhangSan"
    console.log(attr.usrName)
}

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

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://blog.csdn.net/TianYanRen111/article/details/135827212

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关文章

  • 带你了解C++的动态内存分配

    带你了解C++的动态内存分配

    今天小编就为大家分享一篇关于关于C++动态分配内存的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-08-08
  • C++中vector容器的常用操作方法实例总结

    C++中vector容器的常用操作方法实例总结

    vector容器一般被用作创建动态数组,动态数组就像Python中的list结构一样,可以比普通数组拥有更丰富操作方法,下面就为大家整理了一些最常用的操作:
    2016-05-05
  • C++实现图书管理系统课程设计(面向对象)

    C++实现图书管理系统课程设计(面向对象)

    这篇文章主要为大家详细介绍了C++实现图书管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 浅谈c++中的while(cin)问题

    浅谈c++中的while(cin)问题

    下面小编就为大家带来一篇浅谈c++中的while(cin)问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 详解C++编程中数组的基本用法

    详解C++编程中数组的基本用法

    这篇文章主要介绍了C++编程中数组的基本用法,包括数组的初始化等基本知识,需要的朋友可以参考下
    2016-01-01
  • C语言实现堆排序的简单实例

    C语言实现堆排序的简单实例

    这篇文章主要介绍了C语言实现堆排序的简单实例,讲述了堆排序的原理,需要的朋友可以参考下
    2014-07-07
  • C语言责任链模式示例代码

    C语言责任链模式示例代码

    大家好,本篇文章主要讲的是C语言责任链模式示例代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • 深入解析C++ Data Member内存布局

    深入解析C++ Data Member内存布局

    本篇文章是对C++中的Data Member内存布局进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • C语言单双线性及循环链表与实例

    C语言单双线性及循环链表与实例

    这篇文章主要介绍了C语言的单链表、双链表和循环链表,还有一些相关的实例,感兴趣的同学可以借鉴一下
    2023-03-03
  • C++德州扑克的核心规则算法

    C++德州扑克的核心规则算法

    德州扑克想必很多人都玩过,当然对于新手需要说明的是,德州指的是德克萨斯州,而不是山东德州。分享下在计算最大牌型,比牌逻辑的算法和洗牌的方法,希望对大家有帮助。
    2016-04-04

最新评论