最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中 創(chuàng)建動態(tài) QML 對象的方法

 更新時(shí)間:2021年12月14日 17:24:51   作者:友善啊,朋友  
這篇文章主要介紹了 JavaScript中 創(chuàng)建動態(tài) QML 對象,下面文章主要分析了兩中方法,分別是從 QML 字符串創(chuàng)建對象和動態(tài)創(chuàng)建組件以及刪除對象等方法,具有有一定的參考價(jià)值,需要的小伙伴可以參考一下

一、動態(tài)創(chuàng)建對象

有兩種方法可以從 JavaScript 動態(tài)創(chuàng)建對象:

  • 調(diào)用 Qt.createComponent() 動態(tài)創(chuàng)建 Component 對象
  • 使用 Qt.createQmlObject() 從 QML 字符串創(chuàng)建對象

雖然動態(tài)創(chuàng)建的對象可以與其他對象一樣使用,但它們在 QML 中沒有 id。

1.1、動態(tài)創(chuàng)建組件

可以調(diào)用它的 createObject() 方法來創(chuàng)建該組件的一個(gè)實(shí)例。這個(gè)函數(shù)可以接受兩個(gè)參數(shù):

第一個(gè)是新對象的父對象。父對象可以是圖形對象(即 Item 類型)或非圖形對象(即 QtObject 或 C++ QObject 類型)。只有帶有圖形父對象的圖形對象才會被渲染到 Qt Quick 可視畫布上。如果希望稍后設(shè)置父級,可以安全地將 null 傳遞給此函數(shù)。
第二個(gè)是可選的,是一個(gè)屬性值對的映射,它定義了對象的初始任何屬性值。此參數(shù)指定的屬性值在對象創(chuàng)建完成之前應(yīng)用于對象,避免在必須初始化特定屬性以啟用其他屬性綁定時(shí)可能發(fā)生的綁定錯(cuò)誤。此外,與在創(chuàng)建對象后定義屬性值和綁定相比,性能優(yōu)勢很小。
示例。

Sprite.qml 它定義了一個(gè)簡單的 QML 組件:

import QtQuick 2.0
 
Rectangle { width: 80; height: 50; color: "red" }


main.qml 導(dǎo)入了一個(gè) componentCreation.js JavaScript 文件,該文件將創(chuàng)建 Sprite 對象:

import QtQuick 2.0
import "componentCreation.js" as MyScript
 
Rectangle 
{
    id: appWindow
    width: 300; height: 300
 
    Component.onCompleted: MyScript.createSpriteObjects();
}


componentCreation.js

var component;
var sprite;
 
function createSpriteObjects() 
{
    component = Qt.createComponent("Sprite.qml");
    if (component.status == Component.Ready)
        finishCreation();
    else
        component.statusChanged.connect(finishCreation);
}
 
function finishCreation() 
{
    if (component.status == Component.Ready) 
    {
        sprite = component.createObject(appWindow, {x: 100, y: 100});
        if (sprite == null) 
        {
            console.log("Error creating object");
        }
    } 
    else if (component.status == Component.Error) 
    {
        console.log("Error loading component:", component.errorString());
    }
}


當(dāng)使用帶有相對路徑的文件時(shí),路徑應(yīng)該是相對于執(zhí)行 Qt.createComponent() 的文件。

也可以通過 incubateObject() 函數(shù)在不阻塞的情況下實(shí)例化組件。

1.2、從 QML 字符串創(chuàng)建對象

可以使用 Qt.createQmlObject() 函數(shù)從 QML 字符串創(chuàng)建 QML 對象,如下例所示:

const newObject = Qt.createQmlObject(`
    import QtQuick 2.0
    Rectangle 
    {
        color: "red"
        width: 20
        height: 20
    }
    `,
    parentItem,
    "myDynamicSnippet"
);


  • 第一個(gè)參數(shù)是要?jiǎng)?chuàng)建的 QML 字符串。
  • 第二個(gè)參數(shù)是新對象的父對象,適用于組件的父參數(shù)語義同樣適用于 createQmlObject() 。
  • 第三個(gè)參數(shù)是與新對象關(guān)聯(lián)的文件路徑,這用于錯(cuò)誤報(bào)告。

如果 QML 字符串使用相對路徑導(dǎo)入文件,則路徑應(yīng)該相對于定義父對象(方法的第二個(gè)參數(shù))的文件。

在構(gòu)建靜態(tài) QML 應(yīng)用程序時(shí),會掃描 QML 文件以檢測導(dǎo)入依賴項(xiàng)。這樣,所有必要的插件和資源都會在編譯時(shí)解決。但是,這僅考慮顯式導(dǎo)入語句(位于 QML 文件頂部的語句),而不考慮包含在字符串文字中的導(dǎo)入語句。為了支持靜態(tài)構(gòu)建,用戶需要確保使用 Qt.createQmlObject() 的 QML 文件在文件頂部明確包含所有(包括字符串文字內(nèi)部)必要的導(dǎo)入。

二、動態(tài)刪除對象

在許多用戶界面中,將可視對象的不透明度設(shè)置為 0 或?qū)⒖梢晫ο笠瞥銎聊欢皇菍⑵鋭h除就足夠了。 但是,如果有大量動態(tài)創(chuàng)建的對象,則刪除未使用的對象可能會獲得有價(jià)值的性能優(yōu)勢。

請注意:永遠(yuǎn)不應(yīng)該手動刪除由便利 QML 對象工廠(例如 Loader 和 Repeater)動態(tài)創(chuàng)建的對象。此外,應(yīng)該避免刪除不是自己動態(tài)創(chuàng)建的對象。

可以使用 destroy() 方法刪除項(xiàng)目。 此方法有一個(gè)可選參數(shù)(默認(rèn)為 0),用于指定銷毀對象之前的近似延遲(以毫秒為單位)。

示例。application.qml 創(chuàng)建 SelfDestroyingRect.qml 組件的五個(gè)實(shí)例。 每個(gè)實(shí)例運(yùn)行一個(gè) NumberAnimation,當(dāng)動畫完成時(shí),調(diào)用它的根對象上的 destroy() 來銷毀自己:

application.qml???

import QtQuick 2.0
 
Item 
{
    id: container
    width: 500; height: 100
 
    Component.onCompleted: 
    {
        var component = Qt.createComponent("SelfDestroyingRect.qml");
        for (var i=0; i<5; i++) 
        {
            var object = component.createObject(container);
            object.x = (object.width + 10) * i;
        }
    }
}


SelfDestroyingRect.qml

import QtQuick 2.0
 
Rectangle 
{
    id: rect
    width: 80; height: 80
    color: "red"
 
    NumberAnimation on opacity 
    {
        to: 0
        duration: 1000
 
        onRunningChanged: 
        {
            if (!running) 
            {
                console.log("Destroying...")
                rect.destroy();
            }
        }
    }
}
 

或者,application.qml 可以通過調(diào)用 object.destroy() 銷毀創(chuàng)建的對象。

請注意:對該對象內(nèi)的對象調(diào)用 destroy() 是安全的。 對象不會在調(diào)用 destroy() 的瞬間被銷毀,而是在該腳本塊結(jié)束和下一幀之間的某個(gè)時(shí)間被清除(除非指定了非零延遲)。

另請注意,如果 SelfDestroyingRect 實(shí)例是像這樣靜態(tài)創(chuàng)建的:

Item 
{
    SelfDestroyingRect 
    {
        // ...
    }
}


這會導(dǎo)致錯(cuò)誤,因?yàn)閷ο笾挥性趧討B(tài)創(chuàng)建時(shí)才能動態(tài)銷毀。

使用 Qt.createQmlObject() 創(chuàng)建的對象可以類似地使用 destroy() 銷毀:

const newObject = Qt.createQmlObject(`
    import QtQuick 2.0
    Rectangle 
    {
        color: "red"
        width: 20
        height: 20
    }
    `,
    parentItem,
    "myDynamicSnippet"
);
newObject.destroy(1000);

到此這篇關(guān)于 JavaScript中 創(chuàng)建動態(tài) QML 對象的方法的文章就介紹到這了,更多相關(guān) JavaScript 創(chuàng)建動態(tài) QML 對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解js正則表達(dá)式驗(yàn)證時(shí)間格式xxxx-xx-xx形式

    詳解js正則表達(dá)式驗(yàn)證時(shí)間格式xxxx-xx-xx形式

    本篇文章主要介紹了詳解js正則表達(dá)式驗(yàn)證時(shí)間格式xxxx-xx-xx形式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • ESLint詳解及在WebStorm中的應(yīng)用步驟

    ESLint詳解及在WebStorm中的應(yīng)用步驟

    ESLint是一種JavaScript代碼檢查工具,開發(fā)者可以通過自定義規(guī)則進(jìn)行代碼風(fēng)格和質(zhì)量的控制,使用ESLint的過程包括安裝、初始化配置、配置規(guī)則、運(yùn)行ESLint檢查代碼、與編輯器集成,以及與構(gòu)建工具集成等,需要的朋友可以參考下
    2024-09-09
  • Javascript Request獲取請求參數(shù)如何實(shí)現(xiàn)

    Javascript Request獲取請求參數(shù)如何實(shí)現(xiàn)

    使用Javascript Request獲取參數(shù)的時(shí)候總是提示出錯(cuò),本文為此問題提供詳細(xì)的解決方案,需要了解的朋友可以參考下
    2012-11-11
  • ES5新增數(shù)組的實(shí)現(xiàn)方法

    ES5新增數(shù)組的實(shí)現(xiàn)方法

    這篇文章主要介紹了ES5新增數(shù)組的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Bootstrap實(shí)現(xiàn)帶暫停功能的輪播組件(推薦)

    Bootstrap實(shí)現(xiàn)帶暫停功能的輪播組件(推薦)

    最近小編在項(xiàng)目中用到了一款帶輪播組件,功能非常齊全,可以設(shè)置各種標(biāo)題樣式、動畫效果、輪播時(shí)間、開始暫停等功能,下面小編通過本文給大家詳細(xì)介紹下實(shí)現(xiàn)過程,需要的朋友參考下吧
    2016-11-11
  • 詳解用webpack把我們的業(yè)務(wù)模塊分開打包的方法

    詳解用webpack把我們的業(yè)務(wù)模塊分開打包的方法

    本篇文章主要介紹了用webpack把我們的業(yè)務(wù)模塊分開打包的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 分享5個(gè)小技巧讓你寫出更好的 JavaScript 條件語句

    分享5個(gè)小技巧讓你寫出更好的 JavaScript 條件語句

    在使用 JavaScript 時(shí),我們常常要寫不少的條件語句。這里有五個(gè)小技巧,可以讓你寫出更干凈、漂亮的條件語句。需要的朋友跟隨小編一起學(xué)習(xí)吧
    2018-10-10
  • javascript頁面倒計(jì)時(shí)實(shí)例

    javascript頁面倒計(jì)時(shí)實(shí)例

    這篇文章主要介紹了javascript頁面倒計(jì)時(shí)實(shí)現(xiàn)方法,可實(shí)現(xiàn)簡單的頁面倒計(jì)時(shí)及自動提交表單功能,非常簡單實(shí)用,需要的朋友可以參考下
    2015-07-07
  • JS小知識之如何將CSV轉(zhuǎn)換為JSON字符串

    JS小知識之如何將CSV轉(zhuǎn)換為JSON字符串

    CSV文件一般是以逗號為分隔值的文件(Comma-Separated?Values,CSV,有時(shí)也稱為字符分隔值,因?yàn)榉指糇址部梢圆皇嵌禾?,其文件以純文本形式存儲表格數(shù)據(jù)(數(shù)字和文本),下面這篇文章主要給大家介紹了JS小知識之如何將CSV轉(zhuǎn)換為JSON字符串的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Javascript獲取HTML靜態(tài)頁面參數(shù)傳遞值示例

    Javascript獲取HTML靜態(tài)頁面參數(shù)傳遞值示例

    獲取HTML靜態(tài)頁面參數(shù)傳遞值可以利用split函數(shù)來按參數(shù)切成數(shù)組、利用正則表達(dá)式來獲取,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下
    2013-08-08

最新評論

宁河县| 武功县| 西宁市| 平安县| 南汇区| 吴忠市| 封丘县| 永德县| 咸丰县| 宁波市| 洛浦县| 淅川县| 尉氏县| 韶关市| 福泉市| 拜城县| 琼海市| 常宁市| 安仁县| 宜城市| 慈利县| 旬阳县| 保山市| 南开区| 基隆市| 耿马| 民勤县| 巴楚县| 沂南县| 海林市| 武乡县| 泰宁县| 邵阳县| 崇仁县| 山东省| 六安市| 绥化市| 南召县| 关岭| 昌黎县| 宁南县|