qml中QtObject類型的用法小結(jié)
一、描述
QtObject 類型是一個(gè)非可視元素,僅包含 objectName 屬性。
如果需要一個(gè)非常輕量級(jí)的類型來(lái)包含一組自定義屬性,那么創(chuàng)建一個(gè) QtObject 會(huì)很合適:
import QtQuick 2.0
Item
{
QtObject
{
id: attributes
property string name
property int size
property variant attributes
}
Text { text: attributes.name }
}它對(duì)于 C++ 集成也很有用,因?yàn)樗^承自 QObject。
二、屬性成員
objectName : string
此屬性保存對(duì)象實(shí)例的 QObject::objectName。
這允許 C++ 應(yīng)用程序使用 QObject::findChild() 方法在 QML 組件中定位項(xiàng)目。
例如,以下 C++ 應(yīng)用程序定位子 Rectangle 項(xiàng)并動(dòng)態(tài)更改其顏色值:
// 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));三、其他
私有化,,,來(lái)看以下例子
// 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屬性可以直接訪問(wèn)賦值,例如在main.qml中 MyRectangle{ hobby: “xxx” … }。
但是如何使其不能被訪問(wèn) 呢???
就可以將其放置在QtObject類型中。例如,MyRectangle.qml中:
QtObject {
id: attributes
property string usrName: "zhangSan"
}此時(shí),在main.qml中就不能直接通過(guò) MyRectangle { usrName: “xxx” }這種形式訪問(wèn)賦值了,否則報(bào)錯(cuò)如下:
qrc:/main.qml:17 Cannot assign to non-existent property “usrName”
// main.qml
Row {
MyRectangle {
hobby: "play games..."
usrName: "zzzz" // 錯(cuò)誤,
Component.onCompleted: {
attr.usrName = "zhangSan"
console.log(attr.usrName)
}
}
}起到了一種類似私有化的作用(僅限在MyRectangle.qml中訪問(wèn))。
注意:當(dāng)然,以上私有化也不是絕對(duì)的。。
如果確實(shí)需要在main.qml中定義的MyRectangle類型中訪問(wèn)usrName屬性,
可以事先在MyRectangle.qml中對(duì)QtObject類型進(jìn)行別名設(shè)置,例如
property alias attr: attributes
此時(shí),就可以main.qml中訪問(wèn)了,,,例如
Component.onCompleted: {
attr.usrName = "zhangSan"
console.log(attr.usrName)
}到此這篇關(guān)于qml中QtObject類型的使用的文章就介紹到這了,更多相關(guān)qml QtObject類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mac OS上搭建Apache+PHP+MySQL開(kāi)發(fā)環(huán)境的詳細(xì)教程
這篇文章主要介紹了Mac OS上搭建Apache+PHP+MySQL開(kāi)發(fā)環(huán)境的詳細(xì)教程,包括常見(jiàn)的PHP連接MySQL失敗問(wèn)題的解決辦法,需要的朋友可以參考下2016-01-01
QT實(shí)現(xiàn)QML側(cè)邊導(dǎo)航欄的最簡(jiǎn)方法
本文主要介紹了QT實(shí)現(xiàn)QML側(cè)邊導(dǎo)航欄的最簡(jiǎn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
C++實(shí)現(xiàn)尋找最低公共父節(jié)點(diǎn)的方法
這篇文章主要介紹了C++實(shí)現(xiàn)尋找最低公共父節(jié)點(diǎn)的方法,是數(shù)據(jù)結(jié)構(gòu)中二叉樹(shù)的一個(gè)經(jīng)典算法,有一定的借鑒價(jià)值,需要的朋友可以參考下2014-09-09
C語(yǔ)言實(shí)現(xiàn)餐廳管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)餐廳管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
使用C語(yǔ)言求二叉樹(shù)結(jié)點(diǎn)的最低公共祖先的方法
這篇文章主要介紹了使用C語(yǔ)言求二叉樹(shù)結(jié)點(diǎn)的最低公共祖先的方法,文中還給出了ACM的練習(xí)題目,需要的朋友可以參考下2015-08-08
C語(yǔ)言素?cái)?shù)(質(zhì)數(shù))判斷的3種方法舉例
這篇文章主要給大家介紹了關(guān)于C語(yǔ)言素?cái)?shù)(質(zhì)數(shù))判斷的3種方法,質(zhì)數(shù)是只能被1或者自身整除的自然數(shù)(不包括1),稱為質(zhì)數(shù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11

