QtQuick 基础教程(一)

最近需要将一个C++编写的软件移植到手机上,首先适配Android。要学习Anroid开发是一件很痛苦的事,于是我看了Qt,官方推荐QtQuick。试了几个例子,确实不错,那么就它了。
QtQuick本质是Qt为适应移动开发而做的一个取舍。经过一些了解后,我学习QtQuick之路就这么愉快地开始了。

QtQuick简介

先简单科普QtQuick。QtQuick是Qt公司专门为移动开发设计的解决方案,自Qt5引入,目前已经发展到2.6版本。其实现基础是Qt公司设计的一种语言QML。QML类似于CSS,这让UI设计人员非常适应,可以非常快速开发界面模型。此外,QtQuick可以使用Javascript代码,这让移动开发人员很开心啊,每天和后台做交流时方便多了。最后对于需要复杂计算的内容,可以使用C++来扩展。所以说QtQuick可以说是Qt公司为移动开发苦心经营地产品。
如此简单的代码就能创建下图所示代码,想想也动心啊。如果看到QtQuick的官方示例的话,相信会信心更足。

import QtQuick 2.0
Rectangle {
    width: 100
    height: 100
    color: "red"
}

这里写图片描述

QtQuick基本原理

QtQuick本质上仍然是Qt库的一个子模块。所以说到底,它还是靠C++实现的。换句话说,QML语言就是给C++代码穿一个马甲,QtQuick是单独为移动开发设计一套模块。大家可以把QML代码运行理解为类似浏览器解析网页(html语言)的方式。实际用QML编码时,大家就倒发现在QML代码中用的所有元素都是用C++封装好的。所以理解成把QML转换为C++代码再运行,可能更合适。
官方介绍:

The Qt Quick module is the standard library for writing QML applications. While the Qt QML module provides the QML engine and language infrastructure, the Qt Quick module provides all the basic types necessary for creating user interfaces with QML. It provides a visual canvas and includes types for creating and animating visual components, receiving user input, creating data models and views and delayed object instantiation.
QtQuick模块是写QML应用的标准库。QML模块提供QML引擎和语言框架,QtQuick模块提供所有创建QML界面的基本类型:画面(canvas)、基本元素、可作用于基本元素动画元素、用户输入、数据模型、窗口和延迟实例化功能。

QtQuick重要概念

QtQuick有几大重要概念:绘图区域用户输入元素定位状态、动画模拟模型、视图及数据存储粒子效应和视觉效果简化操作的类型。本文简单介绍绘图区域和元素定位,其他日后再讲。
基本语法请参照QtQuick基础教程(二)—QML基本语法

绘图区域

坐标规定

QtQuick提供的绘图区域是二维的,但有Z坐标。
QtQuick左上角的坐标是(0,0)。
和QtWidgets模块类似,子元素使用的坐标是相对于父坐标的。详情请见Coordinate System

可视元素的父元素

QtQuick有两种父类关系。第一种是我们常说的QObject的Parent,表示拥有关系,用于控制元素生命周期。第二种是可视化上的父子关系(父组件不可见是,子组件也不可见)。一般来说,这两者在QML应用中是一致的。详情请见Visual Parent

场景图

场景图(Scene Graph)是QtQuick要采用全新设计模块的关键。简单来讲,QtQuick中不再使用平台定义绘图元素来绘制界面,而是统一交由OpenGL来绘制。我在另一篇博文中详细介绍QtQuick基础教程(四)—场景渲染(Scene Graph)

元素定位

QtQuick中有4种给元素定位的方式:绝对坐标(包括关联坐标)、锚(Anchors)、定位器(Poisitioners)、布局(Layout)。详情请见我另一篇博文QtQuick基础教程(三)—界面元素布局

绝对坐标

绝对坐标就是直接给出x、y值。关联坐标是一个元素的的坐标是通过另一个元素的值计算出来的(有一定性能损耗)。如:

Item{
    x: 100
    Rectangle {x: parent.x/2}
}

锚(Anchors)

锚是一种很方便的方式,它也需要计算位置,但不需开发人员自己写计算坐标的代码了。

定位器(Positioners)

定位器是布局的一种退化实现,常用的有:Column、Row、Grid三种。

布局(Layout)

布局就是Qt开发最常见的了,常用的有:ColumnLayout、RowLayout、GridLayout三种。

C++扩展要点

有空再写,先留坑。C++ Extension Points

参考文档

有空再写,先留坑。
QtQuick C++ Classes
QtQuick QML Types
QtQuick Examples

小节

QtQuick非常适合于以下几个情况:
(1)已经用Qt开发过想关软件,但需要移植到新平台;
(2)开发全新小应用(复杂软件还是不要用QML做控制);
(3)编程水平较初级,且需快速开发(QtQuick开发环境很好搭建的)。
(4)开发可移植移动平台应用,且不需要平台全新特性(如iPhone的Force Touch支持)。

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QtQuick 是一种用于创建用户界面的现代 UI 库,它是 Qt Framework 的一部分,特别适合构建跨平台的触摸友好应用,如移动应用、桌面应用和嵌入式系统。QtQuick 使用声明式编程语言,让开发者能够通过简洁的声明式代码描述UI元素的行为和布局,而不是通过复杂的控制流。 **QtQuick 教程简介:** 1. **入门学习**: - 开始前,确保已经安装了Qt Creator或Qt SDK,并熟悉基本的C++或JavaScript(Qt Quick主要用到了QML,一种基于XML的声明式语言)。 - 官方文档:Qt 官网提供了丰富的QtQuick教程和示例,从基础QML语法到更复杂的控件和动画。 2. **基础知识**: - 学习 QML 元素,如Rectangle、Button、Text等基本组件。 - 了解信号与槽(Signals and Slots),这是QtQuick中的关键机制,用于连接UI元素的交互。 3. **布局管理**: - 掌握Item hierarchy(层次结构)和anchors(锚点)用于布局UI元素。 - 学习Layouts(网格布局、垂直/水平布局等)。 4. **动画与过渡**: - 使用Transition和Animation来创建平滑的界面效果。 - 时间线(Timeline)和Easing Functions在动画中的应用。 5. **高级主题和样式**: - 如何使用Stylesheets来定制组件的外观。 - 理解Material Design for QtQuick的主题支持。 6. **组件和模块**: - 了解如何使用Qt提供的预构建模块,如QtQuick.Controls, QtQuick.Layouts, QtQuick.Dialogs等。 - 或者自定义QtQuick组件。 **相关问题--:** 1. 如何在QtQuick中实现组件化开发? 2. 如何在QML中处理用户输入事件? 3. 在QtQuick中如何创建响应式布局? 4. 如何在动画中使用定时器和事件处理? 5. QtQuick Controls 2相比于原生控件有哪些优势?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值