我需要写一个BB-10应用程序 . 该应用程序可能具有相当多的UI,动态页面等 . 我正在考虑在C中编写应用程序逻辑(数据模型等) . 我应该使用QML进行UI设计吗? C和QML之间的集成有多好和灵活?我不会遇到一些问题吗?我的UI可能包含许多QML页面(或对话框,在导航窗格等中显示),当用户在QML中单击某些操作时,我可能想要调用某些C代码或导航到其他QML页面等 . 感谢您的帮助 .
我对移动开发一无所知,但QML很好,应该使接口更容易维护,修改和移植到其他设备 .
只要您使用Qt框架,使用QObjects, Q_PROPERTY 和 Q_INVOKABLE 方法,QML和C的集成就很容易......这非常简单 .
Q_PROPERTY
Q_INVOKABLE
编辑:我必须补充一点,我没有发现从C中访问QML对象就像反过来一样容易 . 这是因为QML在少数数据类型的层次结构中组织对象,您必须使用 findChild 或检查 objectName 动态发现子节点 .
findChild
objectName
无论如何,由于QML允许绑定属性,您应该能够使用您的数据创建一些C类,并在UI上访问它们而不需要太多努力;)
当你需要使用C来控制应用程序时,我也会经历这样的情况,即qml没有太大的做法 . 通过NavigationPane继承您的类并使用 QmlDocument::create() 逻辑添加您的第一页如果您在导航使用表旁边有一些页面并添加一些方法当你使用 QmlDocument::create() 创建新页面来访问那些方法时,这个类 Q_INVOKABLE 并传递setContext这个类 . 最后永远不要忘记添加或处理 OnTrasitionEnded(Page*) 信号来删除页面并释放内存
QmlDocument::create()
OnTrasitionEnded(Page*)
简答:C / QML集成非常好 . 有时可能非常冗长,但在C中你无法做到 .
即使在C中做所有事情都要快一点 . BlackBerry正在推动在QML / Javascript中编写所有UI工作流的代码 .
优势在于业务逻辑和应用流程之间的明确分离 . 另一个优点是QML写入更短并且有希望维护 . 不要忘记您可以在C中创建新的QML对象 .
onTriggered: { var item = dataModel.data(indexPath); if (item.count > 0) { appLogic.updateFeed(item.id); navPane.push(resultPage); } }
3 回答
我对移动开发一无所知,但QML很好,应该使接口更容易维护,修改和移植到其他设备 .
只要您使用Qt框架,使用QObjects,
Q_PROPERTY
和Q_INVOKABLE
方法,QML和C的集成就很容易......这非常简单 .编辑:我必须补充一点,我没有发现从C中访问QML对象就像反过来一样容易 . 这是因为QML在少数数据类型的层次结构中组织对象,您必须使用
findChild
或检查objectName
动态发现子节点 .无论如何,由于QML允许绑定属性,您应该能够使用您的数据创建一些C类,并在UI上访问它们而不需要太多努力;)
当你需要使用C来控制应用程序时,我也会经历这样的情况,即qml没有太大的做法 . 通过NavigationPane继承您的类并使用
QmlDocument::create()
逻辑添加您的第一页如果您在导航使用表旁边有一些页面并添加一些方法当你使用QmlDocument::create()
创建新页面来访问那些方法时,这个类Q_INVOKABLE
并传递setContext这个类 . 最后永远不要忘记添加或处理OnTrasitionEnded(Page*)
信号来删除页面并释放内存简答:C / QML集成非常好 . 有时可能非常冗长,但在C中你无法做到 .
即使在C中做所有事情都要快一点 . BlackBerry正在推动在QML / Javascript中编写所有UI工作流的代码 .
优势在于业务逻辑和应用流程之间的明确分离 . 另一个优点是QML写入更短并且有希望维护 . 不要忘记您可以在C中创建新的QML对象 .