翻譯|實(shí)施案例|編輯:鮑佳佳|2020-09-21 10:03:38.583|閱讀 379 次
概述:本示例說明如何在帶有Qt IVI Generator的qface文件中使用model類型來生成模型。它將解釋有關(guān)如何使用model 類型及其內(nèi)部工作方式的詳細(xì)信息。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
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)行。現(xiàn)在我們?yōu)槟闾峁┝嗣赓M(fèi)的試用版。趕快點(diǎn)擊下載Qt最新試用版吧>>
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 { modelcontacts; void insertContact(int index, Contact contact); } struct Contact { string forename; string name; int phone; }
contact 屬性被定義為
對于后端接口,屬性類型不同,QIviPagingModelInterface指針是必需的,因?yàn)镼IviPagingModel也是QtIvi功能,并且像所有功能一樣,它使用后端接口進(jìn)行前端-后端分離。有關(guān)更多信息,請參見概念和體系結(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)容。
對于此用例,可以使用默認(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)容返回。
演示申請演示應(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屬性從地址簿對象中檢索模型,并將其傳遞給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
自動(dòng)生成的模擬后端代碼使用QIviSimulationEngine從QML文件加載模擬行為。這個(gè)特殊的引擎確保將自動(dòng)生成的后端接口提供給QML文件,并且可以從那里擴(kuò)展它們。它還確保接口僅可用于此引擎實(shí)例,并且對于在同一進(jìn)程(例如,前端)中運(yùn)行的其他引擎不可用。
使用ivigenerator作為模擬后端,example.ivi.addressbook.simulation uri 中提供了模擬界面。所提供的類型以模擬后端實(shí)現(xià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對象。該函數(shù)帶有三個(gè)參數(shù),第一個(gè)是PendingReply對象,用于在請求成功或失敗后通知前端。其他參數(shù)與IDL文件中定義的相同。
要將提供的聯(lián)系人插入到我們的列表中,我們使用contacts屬性,該屬性保存contacts屬性的QIviPagingModelInterface實(shí)現(xiàn)。此實(shí)現(xiàn)提供了一些額外的便捷功能,仿真可使用這些便捷功能輕松修改模型。在我們的例子中,我們只調(diào)用insert()函數(shù),然后讓自動(dòng)生成的實(shí)現(xiàn)完成其余的工作。
本篇文章中的內(nèi)容你都學(xué)會(huì)了嗎?如果這篇文章沒能滿足你的需求、點(diǎn)擊獲取更多文章教程!現(xiàn)在立刻下載Qt免費(fèi)試用吧!更多Qt類開發(fā)工具QtitanRibbon、QtitanChart、QtitanNavigation、QtitanDocking、QtitanDataGrid在線訂購現(xiàn)直降1000元,歡迎咨詢慧都獲取更多優(yōu)惠>>
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: