本篇內(nèi)容介紹了“如何使用Qt IVI Generator生成模型”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的永清網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
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通訊錄示例
本示例說明如何使用Qt IVI Generator生成模型。
介紹
本示例說明如何在帶有Qt IVI Generator的qface文件中使用model類型來生成模型。
它將解釋有關(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ōu)化的方式檢索其數(shù)據(jù)的基本功能。
對(duì)于后端接口,屬性類型不同,QIviPagingModelInterface指針是必需的,因?yàn)镼IviPagingModel也是QtIvi功能,并且像所有功能一樣,它使用后端接口進(jìn)行前端-后端分離。有關(guān)更多信息,請(qǐng)參見概念和體系結(jié)構(gòu)。
后端插件需要為每個(gè)公開的屬性實(shí)現(xiàn)QIviPagingModelInterface類。該backend_simulator模板已經(jīng)注意到了這一問題,并產(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訪問實(shí)際的聯(lián)系人,它通過model.item展示給QML 。
擴(kuò)展仿真行為
因?yàn)閎ackend_simulator模板只能生成一個(gè)存根,所以它不知道應(yīng)該為qface文件的insertContact函數(shù)實(shí)現(xiàn)什么行為。ivigenerator會(huì)簡單地生成存根,并打印一條消息,指出該功能未實(shí)現(xiàn)。
通過使用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)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!