卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

C 調(diào)用QML方法

加載QML文件假設(shè)有一個(gè)QML文件,代碼如下所示:```qmlimport QtQuick 2.0Item { id: rootItem width: 200 height: 200

加載QML文件

假設(shè)有一個(gè)QML文件,代碼如下所示:

```qml

import QtQuick 2.0

Item {

id: rootItem

width: 200

height: 200

Rectangle {

id: rectangleItem

width: 100

height: 100

color: "red"

function helloWorld() {

console.log("Hello World!")

}

}

}

```

我們可以使用QQmlComponent或QQuickView的C 代碼來(lái)加載這個(gè)QML文檔。當(dāng)使用QQmlComponent時(shí),需要調(diào)用QQmlComponent::create()來(lái)創(chuàng)建組件的新實(shí)例化對(duì)象代碼:

```cpp

#include

#include

#include

#include

int main(int argc, char *argv[])

{

QGuiApplication app(argc, argv);

QQmlEngine engine;

QQmlComponent component(engine, QUrl(QStringLiteral("qrc:/main.qml")));

// 創(chuàng)建組件的新實(shí)例化對(duì)象

QObject *object ();

if (object) {

// 對(duì)象已經(jīng)被實(shí)例化

// 修改屬性

QQmlProperty(object, "width").write(300);

QQmlProperty(object, "height").write(300);

// 調(diào)用QML方法

QMetaObject::invokeMethod(object, "helloWorld");

// 將object轉(zhuǎn)換為其實(shí)際類型,并使用編譯時(shí)安全性調(diào)用方法

QQuickItem *item qobject_cast(object);

if (item) {

item->setOpacity(0.5);

}

} else {

// 對(duì)象創(chuàng)建失敗

}

return app.exec();

}

```

使用QQuickView后會(huì)自動(dòng)創(chuàng)建組件的實(shí)例,該實(shí)例可以通過(guò)QQuickView::rootObject()來(lái)訪問(wèn)該對(duì)象代碼:

```cpp

#include

#include

#include

int main(int argc, char *argv[])

{

QGuiApplication app(argc, argv);

QQuickView view;

(QUrl(QStringLiteral("qrc:/main.qml")));

();

// 獲取根對(duì)象

QObject *object ();

if (object) {

// 對(duì)象已經(jīng)被實(shí)例化

// 修改屬性

QQmlProperty(object, "width").write(300);

QQmlProperty(object, "height").write(300);

// 調(diào)用QML方法

QMetaObject::invokeMethod(object, "helloWorld");

// 將object轉(zhuǎn)換為其實(shí)際類型,并使用編譯時(shí)安全性調(diào)用方法

QQuickItem *item qobject_cast(object);

if (item) {

item->setOpacity(0.5);

}

} else {

// 對(duì)象創(chuàng)建失敗

}

return app.exec();

}

```

定位QML組件的子對(duì)象

QML組件實(shí)質(zhì)上是具有子對(duì)象的對(duì)象樹,子對(duì)象有兄弟,也有孩子??梢允褂肣Object::objectName屬性和QObject::findChild()來(lái)定位QML組件的子對(duì)象。例如,如果QML中的根Item有一個(gè)Rectangle子項(xiàng):

```qml

import QtQuick 2.0

Item {

id: rootItem

width: 200

height: 200

Rectangle {

id: rectangleItem

width: 100

height: 100

color: "red"

}

}

```

在C 中,可以通過(guò)以下方式找到Rectangle子項(xiàng):

```cpp

QObject *rectangleObject object->findChild("rectangleItem");

if (rectangleObject) {

// 找到了Rectangle子項(xiàng)

QQmlProperty(rectangleObject, "width").write(150);

QQmlProperty(rectangleObject, "height").write(150);

}

```

C 調(diào)用QML方法

所有的QML方法都被暴露給了Qt元對(duì)象系統(tǒng),可以使用QMetaObject::invokeMethod()從C 中調(diào)用。從QML傳遞的方法參數(shù)和返回值在C 中被轉(zhuǎn)換為QVariant值。

例如,假設(shè)我們想要通過(guò)調(diào)用QML的helloWorld()方法來(lái)在C 中打印出"Hello World!":

```qml

import QtQuick 2.0

Item {

function helloWorld() {

console.log("Hello World!")

}

}

```

我們可以使用以下代碼在C 中調(diào)用該方法:

```cpp

// 調(diào)用QML方法

QMetaObject::invokeMethod(object, "helloWorld");

```

這樣就可以在C 中調(diào)用QML方法了。

通過(guò)理解和補(bǔ)充原文內(nèi)容,我重新編寫了一個(gè)關(guān)于C 調(diào)用QML方法的文章,希望對(duì)您有所幫助。

標(biāo)簽: