您好,登錄后才能下訂單哦!
本篇內容介紹了“如何使用Qt IVI Generator生成模型”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Qt(發音為“ cute”,而不是“ cu-tee”)是一個跨平臺框架,通常用作圖形工具包,它不僅創建CLI應用程序中非常有用。而且它也可以在三種主要的臺式機操作系統以及移動操作系統(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設備,Android(Necessitas)和iOS的端口上運行。現在我們為你提供了免費的試用版。
點擊獲取更多文章教程
Qt IVI Generator通訊錄示例
本示例說明如何使用Qt IVI Generator生成模型。
介紹
本示例說明如何在帶有Qt IVI Generator的qface文件中使用model類型來生成模型。
它將解釋有關如何使用model 類型及其內部工作方式的詳細信息。
演練
該示例中使用的IDL文件代表一個地址簿API。它包含一個單獨的界面,將聯系人作為模型提供,并為實際聯系人提供結構定義。
interface AddressBook { model contacts; void insertContact(int index, Contact contact); } struct Contact { string forename; string name; int phone; }
contact 屬性被定義為模型。在前端模板創建一個QIviPagingModel *類型的C ++屬性。連接后端并初始化屬性后,此屬性的getter函數將返回有效實例。這個QIviPagingModel實例可以在C ++和QML中使用,并且已經提供了使用所謂的分頁概念以優化的方式檢索其數據的基本功能。
對于后端接口,屬性類型不同,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
在QML中提供仿真行為
自動生成的模擬后端代碼使用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 IVI Generator生成模型”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。