使用QML Runtime Tool进行原型设计

使用QML Runtime Tool进行原型设计

FirstStepWithQML中已经使用过qml加载和显示我们编写的.qml文件,在继续下一步之前,我们讲讲qml这个工具。

qml可执行文件是一个实用程序,用于加载和显示QML 文件。它主要时用来测试QML应用和组件的。

在生产环境下,通常我们会开发一个C++应用,或者将QML文件绑定到一个模块里。如果将Item而不是Window作为QML文档的根元素的话,qml程序会自动创建一个window来显示QML文档内容。但是,QQmlComponent::create()不会做这件事,这意味着在生产环境下,将设计好的原型移植到C++应用前,我们需要确保根元素是Window,或者在C++中创建一个QQuickView来包含根Item。也就是说,你可以脱离C++代码,直接使用qml来开发界面的各个部分,并进行界面原型测试。

要加载并展示一个.qml文件,可以直接在命令行输入:

qml myqmlfile.qml

要查看配置选项,可以输入qml --help

qml显示原理

当我们的QML文件的根对象是一个Item而不是Window时,在显示该对象前,qml会先加载一个配置文件(configuration.qml),内容类似下面这样:

import QmlRuntime.Config

Configuration {
    PartialScene {
        itemType: "QQuickItem"
        container: Qt.resolvedUrl("ItemWrapper.qml")
    }
}

这个文件定义了声明了一个PartialScene对象,该对象的container属性被填写为一个URL地址,该地址指向另一个QML文件ItemWrapper.qml,最简单的ItemWrapper.qml实现长这样:

import QtQuick

Window {
    required property Item containedObject: null
    onContainedObjectChanged: {
        if (containedObject == undefined || containedObject == null) {
            visible = false;
        } else {
            containedObject.parent = contentItem;
            visible = true;
        }
    }
}

qml运行时会直接将containedObject设置为要显示的Item对象,containedObject这个名字是必须的,不可修改。containedObject.parent = contentItem;则将Item的父对象设置为当前的Window。这样就能完成显示了。

理解上面的原理,我们就可以任意自定义额外的显示特性了:比如以自定义的方式处理resizing等等。

自定义的配置如果命名为configuration.qml,则可以直接qml myqmlfile.qml运行,qml会自动加载configuration.qml文件,如果是其他名字,比如simplest.qml,则可以这样加载:

qml -c simplest myqmlfile.qml

qml默认配置文件

除了可以自定义配置文件,qml提供了两个内置的配置文件,这两个文件以资源的形式内置到qml可执行文件中,要列举他们,可以用下面的命令:

qml --list-conf

输出如下:

Built-in configurations:
  default
  resizeToItem

default配置提供默认行为:根Item将会在启动阶段被resize到填充整个Window,用户在resize Window时,根Item也会跟着变化以填充Window;

resizeToItem的行为:根Item可以设置为他自己的尺寸,Window会适应Item的尺寸。

如果想使用resizeToItem,我们可以使用下面的命令:

$ qml -c resizeToItem selfResizingItem.qml

最新文章和代码都放在github QML-Applications上,期待star。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值