温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用Qt IVI Generator生成模型

发布时间:2021-12-15 14:08:19 来源:亿速云 阅读:158 作者:iii 栏目:大数据

本篇内容介绍了“如何使用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生成模型

介绍

本示例说明如何在带有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生成模型”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

qt
AI