翻譯|實施案例|編輯:鮑佳佳|2020-09-21 10:03:38.583|閱讀 379 次
概述:本示例說明如何在帶有Qt IVI Generator的qface文件中使用model類型來生成模型。它將解釋有關如何使用model 類型及其內部工作方式的詳細信息。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Qt(發音為“ cute”,而不是“ cu-tee”)是一個跨平臺框架,通常用作圖形工具包,它不僅創建CLI應用程序中非常有用。而且它也可以在三種主要的臺式機操作系統以及移動操作系統(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設備,Android(Necessitas)和iOS的端口上運行。現在我們為你提供了免費的試用版。趕快點擊下載Qt最新試用版吧>>
Qt IVI Generator通訊錄示例本示例說明如何使用Qt IVI Generator生成模型。
介紹
本示例說明如何在帶有Qt IVI Generator的qface文件中使用model類型來生成模型。
它將解釋有關如何使用model 類型及其內部工作方式的詳細信息。
演練該示例中使用的IDL文件代表一個地址簿API。它包含一個單獨的界面,將聯系人作為模型提供,并為實際聯系人提供結構定義。
interface AddressBook { modelcontacts; void insertContact(int index, Contact contact); } struct Contact { string forename; string name; int phone; }
contact 屬性被定義為
對于后端接口,屬性類型不同,QIviPagingModelInterface指針是必需的,因為QIviPagingModel也是QtIvi功能,并且像所有功能一樣,它使用后端接口進行前端-后端分離。有關更多信息,請參見概念和體系結構。
后端插件需要為每個公開的屬性實現QIviPagingModelInterface類。該backend_simulator模板已經注意到了這一問題,并產生所有需要的代碼。
配置模擬后端插件
默認情況下,生成的模擬后端不會填充模型的任何數據,因為模板不知道應提供什么內容。
對于此用例,可以使用默認注釋將模擬器配置為提供靜態模擬數據。
以下是在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" ]]
分配給默認變量的JSON片段由Qt IVI Generator解析,并將用于生成模擬后端,該后端創建兩個Contact實例,并將它們作為contact模型的內容返回。
演示申請演示應用程序不是自動生成的,而是與其他示例類似標準的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訪問實際的聯系人,它通過model.item展示給QML 。
擴展仿真行為因為backend_simulator模板只能生成一個存根,所以它不知道應該為qface文件的insertContact函數實現什么行為。ivigenerator會簡單地生成存根,并打印一條消息,指出該功能未實現。
通過使用SimulationFile批注告訴自動生成器我們要提供自己的仿真QML文件,可以解決此限制。
在示例中,simulationFile注釋指向資源文件中的QML文件。資源文件像往常一樣添加到項目文件中,如下所示:
RESOURCES += plugin_resource.qrc
自動生成的模擬后端代碼使用QIviSimulationEngine從QML文件加載模擬行為。這個特殊的引擎確保將自動生成的后端接口提供給QML文件,并且可以從那里擴展它們。它還確保接口僅可用于此引擎實例,并且對于在同一進程(例如,前端)中運行的其他引擎不可用。
使用ivigenerator作為模擬后端,example.ivi.addressbook.simulation uri 中提供了模擬界面。所提供的類型以模擬后端實現的后端接口命名。對于我們的示例,注冊了兩種類型:
我們的模擬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代碼,它將創建一個AddressBookBackend實例并打印一條消息。
為了實現insertContact函數的行為,將JS函數添加到QML中的AddressBookBackend對象。該函數帶有三個參數,第一個是PendingReply對象,用于在請求成功或失敗后通知前端。其他參數與IDL文件中定義的相同。
要將提供的聯系人插入到我們的列表中,我們使用contacts屬性,該屬性保存contacts屬性的QIviPagingModelInterface實現。此實現提供了一些額外的便捷功能,仿真可使用這些便捷功能輕松修改模型。在我們的例子中,我們只調用insert()函數,然后讓自動生成的實現完成其余的工作。
本篇文章中的內容你都學會了嗎?如果這篇文章沒能滿足你的需求、點擊獲取更多文章教程!現在立刻下載Qt免費試用吧!更多Qt類開發工具QtitanRibbon、QtitanChart、QtitanNavigation、QtitanDocking、QtitanDataGrid在線訂購現直降1000元,歡迎咨詢慧都獲取更多優惠>>
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: