溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用Qt IVI Generator生成模型

發(fā)布時(shí)間:2021-12-15 14:08:19 來(lái)源:億速云 閱讀:149 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“如何使用Qt IVI Generator生成模型”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

Qt(發(fā)音為“ cute”,而不是“ cu-tee”)是一個(gè)跨平臺(tái)框架,通常用作圖形工具包,它不僅創(chuàng)建CLI應(yīng)用程序中非常有用。而且它也可以在三種主要的臺(tái)式機(jī)操作系統(tǒng)以及移動(dòng)操作系統(tǒng)(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設(shè)備,Android(Necessitas)和iOS的端口上運(yùn)行?,F(xiàn)在我們?yōu)槟闾峁┝嗣赓M(fèi)的試用版。

點(diǎn)擊獲取更多文章教程

Qt IVI Generator通訊錄示例

本示例說(shuō)明如何使用Qt IVI Generator生成模型。

如何使用Qt IVI Generator生成模型

介紹

本示例說(shuō)明如何在帶有Qt IVI Generator的qface文件中使用model類型來(lái)生成模型。

它將解釋有關(guān)如何使用model 類型及其內(nèi)部工作方式的詳細(xì)信息。

演練

該示例中使用的IDL文件代表一個(gè)地址簿API。它包含一個(gè)單獨(dú)的界面,將聯(lián)系人作為模型提供,并為實(shí)際聯(lián)系人提供結(jié)構(gòu)定義。

interface AddressBook {
    model contacts;

    void insertContact(int index, Contact contact);
}

struct Contact {
    string forename;
    string name;
    int phone;
}

contact 屬性被定義為模型。在前端模板創(chuàng)建一個(gè)QIviPagingModel *類型的C ++屬性。連接后端并初始化屬性后,此屬性的getter函數(shù)將返回有效實(shí)例。這個(gè)QIviPagingModel實(shí)例可以在C ++和QML中使用,并且已經(jīng)提供了使用所謂的分頁(yè)概念以優(yōu)化的方式檢索其數(shù)據(jù)的基本功能。

對(duì)于后端接口,屬性類型不同,QIviPagingModelInterface指針是必需的,因?yàn)镼IviPagingModel也是QtIvi功能,并且像所有功能一樣,它使用后端接口進(jìn)行前端-后端分離。有關(guān)更多信息,請(qǐng)參見(jiàn)概念和體系結(jié)構(gòu)。

后端插件需要為每個(gè)公開(kāi)的屬性實(shí)現(xiàn)QIviPagingModelInterface類。該backend_simulator模板已經(jīng)注意到了這一問(wèn)題,并產(chǎn)生所有需要的代碼。

配置模擬后端插件

默認(rèn)情況下,生成的模擬后端不會(huì)填充模型的任何數(shù)據(jù),因?yàn)槟0宀恢缿?yīng)提供什么內(nèi)容。

對(duì)于此用例,可以使用默認(rèn)注釋將模擬器配置為提供靜態(tài)模擬數(shù)據(jù)。

以下是在example-ivi-addressbook.yaml文件中完成的:

Example.IVI.AddressBook:
    config_simulator:
        simulationFile: "qrc:/plugin_resource/simulation.qml"

Example.IVI.AddressBook.AddressBook#contacts:
    config_simulator:
        default: [[ "John", "Doe", "12345" ], [ "Jane", "Doe", "67890" ]]

分配給默認(rèn)變量的JSON片段由Qt IVI Generator解析,并將用于生成模擬后端,該后端創(chuàng)建兩個(gè)Contact實(shí)例,并將它們作為contact模型的內(nèi)容返回。

演示申請(qǐng)

演示應(yīng)用程序不是自動(dòng)生成的,而是與其他示例類似標(biāo)準(zhǔn)的QQmlEngine安裝程序。

ListView {
    Layout.fillWidth: true
    Layout.fillHeight: true
    model: addressBook.contacts
    clip: true

    delegate: ItemDelegate {
        width: parent.width
        height: 100
        text: model.item.forename + " " + model.item.name
    }
}

使用contacts屬性從地址簿對(duì)象中檢索模型,并將其傳遞給ListView。委托可以使用QIviPagingModel的ItemRole訪問(wèn)實(shí)際的聯(lián)系人,它通過(guò)model.item展示給QML 。

擴(kuò)展仿真行為

因?yàn)閎ackend_simulator模板只能生成一個(gè)存根,所以它不知道應(yīng)該為qface文件的insertContact函數(shù)實(shí)現(xiàn)什么行為。ivigenerator會(huì)簡(jiǎn)單地生成存根,并打印一條消息,指出該功能未實(shí)現(xiàn)。

通過(guò)使用SimulationFile批注告訴自動(dòng)生成器我們要提供自己的仿真QML文件,可以解決此限制。

在示例中,simulationFile注釋指向資源文件中的QML文件。資源文件像往常一樣添加到項(xiàng)目文件中,如下所示:

RESOURCES += plugin_resource.qrc

在QML中提供仿真行為

自動(dòng)生成的模擬后端代碼使用QIviSimulationEngine從QML文件加載模擬行為。這個(gè)特殊的引擎確保將自動(dòng)生成的后端接口提供給QML文件,并且可以從那里擴(kuò)展它們。它還確保接口僅可用于此引擎實(shí)例,并且對(duì)于在同一進(jìn)程(例如,前端)中運(yùn)行的其他引擎不可用。

使用ivigenerator作為模擬后端,example.ivi.addressbook.simulation uri 中提供了模擬界面。所提供的類型以模擬后端實(shí)現(xiàn)的后端接口命名。對(duì)于我們的示例,注冊(cè)了兩種類型:

  • 地址簿后端

  • 聯(lián)系人模型后端

我們的模擬QML文件如下所示:

import QtQuick 2.0
import Example.IVI.AddressBook.simulation 1.0

Item {
    AddressBookBackend {
        id: backend
        property var settings : IviSimulator.findData(IviSimulator.simulationData, "AddressBook")

        function initialize() {
            print("AddressBookSimulation INITIALIZE")
            IviSimulator.initializeDefault(settings, backend)
            Base.initialize()
        }

        function insertContact(reply, index, contact) {
            print("BACKEND SIMULATION INSERT CONTACT")
            contacts.insert(index, contact);
            reply.setSuccess(true);
        }

        Component.onCompleted: {
            console.log("BACKEND SIMULATION CREATED")
        }
    }
}

使用Component.onCompleted處理程序加載了QML代碼,它將創(chuàng)建一個(gè)AddressBookBackend實(shí)例并打印一條消息。

為了實(shí)現(xiàn)insertContact函數(shù)的行為,將JS函數(shù)添加到QML中的AddressBookBackend對(duì)象。該函數(shù)帶有三個(gè)參數(shù),第一個(gè)是PendingReply對(duì)象,用于在請(qǐng)求成功或失敗后通知前端。其他參數(shù)與IDL文件中定義的相同。

要將提供的聯(lián)系人插入到我們的列表中,我們使用contacts屬性,該屬性保存contacts屬性的QIviPagingModelInterface實(shí)現(xiàn)。此實(shí)現(xiàn)提供了一些額外的便捷功能,仿真可使用這些便捷功能輕松修改模型。在我們的例子中,我們只調(diào)用insert()函數(shù),然后讓自動(dòng)生成的實(shí)現(xiàn)完成其余的工作。

“如何使用Qt IVI Generator生成模型”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

qt
AI