作者:奋斗ing丶孩子
转自:http://blog.sina.com.cn/s/blog_a6fb6cc90101h1nz.html
一、前言
Qt5重点
- 出色的图形:Qt Quick2基于OpenGL(ES)来构建场景视图。重写的图形堆栈提供的图形效果与易用性在这一领域达到了从未有过的一个新高度。
- 开发者生产力:QML和JavaScript是用于创建用户界面的主要手段。后端由C++驱动。JavaScript和C++之间的分割为前端开发人员集中精力创造漂亮的图形界面,后端的C++开发人员集中精力在稳定性、性能、延长运行时间提供了一个快速迭代。
- 跨平台移植:随着综合的Qt平台抽象,它现在可以更容易、更快地移植到一个更广泛的平台。Qt5围绕着Qt必备模块和附加组件,它允许操作系统开发人员专注于要领模块,并引出一个较小的运行时概念。
- 开放式开发:Qt目前在Qt-Project中真正开放。发展是开放的、社区性的。
二、Qt5介绍
Qt Quick
Qt Quick是Qt5中使用的用户界面技术,Qt Quick的本身是多种技术的集合:
- QML - 标记语言用户界面
- JavaScript - 动态脚本语言
- Qt C++ - 高度便携增强的C++库
import QtQuick 2.0
Image {
id: root
source: "Images/background.png"
}
因为QML不作任何限制,元素类型使用Image作为根元素,使用source属性作为根元素的背景图像。
注:
每个元素都具有属性,例如一个图象,有width、height,还有其它属性,像source。图像元素的size属性从图像尺寸自动扣除。否则,我们就需要设置width、height属性为一些有用的像素值。
最标准的元素都位于QtQuick 2.0模块—我们在第一行包含的import语句。
id特殊属性是可选的,并包含一个标识符,后来在在文件的其它地方中引用这个元素。重要提示:id属性一旦被设置就不能被更改,且不能在运行时设置。使用root作为ID为根元素只是一种作者的习惯,在较大QML文档中引用最顶层元素则可以预测。
风轮的用户界面的前景元素放置被替换为另一个图片。
通常情况下你的用户界面将被由许多不同的元素类型,而不仅仅是Image元素,像下面这个例子:
import QtQuick 2.0
Image {
id: root
Image {
id: wheel
anchors.centerIn: parent
source: "Images/pinwheel.png"
}
}
使用anchor属性放置风轮在中央位置,锚允许指定父和兄弟姐妹对象之间的几何关系。放在另一个元素的中心(anchors.centerIn: parent)。有left、right、top、bottom、centerIn,、fill、verticalCenter、horizontalCenter关系。当然,他们需要匹配,若锚在顶部元素的左侧则它没有任何意义。
所以我们设置风轮作为背景在父窗体的中心。
注:
有时候你需要精确定心做小的调整。这将有可能用anchors.horizontalCenterOffset或anchors.verticalCenterOffset。类似的调整属性也适用于所有其它锚。请咨询为锚属性的完整列表的文档。
将一个图像作为根矩形元素的子元素展现了一种声明式语言的一个重要概念。描述用户界面层和分组的顺序,其中最顶层(矩形)是首先绘制的,子层在包含元素的局部坐标系中绘制。
为了使展现变得更有趣,我们想加上互动。想法是,当用户按下鼠标中的某处场景以便转动风轮。使用MouseArea元素。
importQtQuick 2.0
Image{
id: root
Image {
id: wheel
anchors.centerIn: parent
source: "Images/pinwheel.png"
MouseArea {
anchors.fill: parent
onClicked: wheel.rotation += 90
}
}
}
当用户点击它里面的覆盖面积时,鼠标区域发出的信号。可以连接到这个信号来覆盖onClicked功能。在这种情况下,参考风轮图像90度旋转。
注:
这适用于每一个信号,命名为:on + SignalName(如:onClicked)。当所有属性值发生了改变时,还发出一个信号,命名为:on + PropertyName + Changed(如:onValueChanged)。
如果一个属性改变你可以用onWithChanged观察。
现在,风轮可以旋转,但仍然不流利。旋转属性将立即更改。我们希望,属性90度改变随着时间的改变来进行。现在动画开始发挥作用。要启用此我们使用一个动画类型调用属性的行为,它指定定义属性的行为的每一个变化。这仅是几种类型声明一个动画。
importQtQuick 2.0
Image{
id: root
Image {
id: wheel
anchors.centerIn: parent
source: "Images/pinwheel.png"
MouseArea {
anchors.fill: parent
onClicked: wheel.rotation += 90
}
Behavior on rotation {
NumberAnimation {
duration: 250
}
}
}
}
现在,每当风轮旋转改变时,将会使用NumberAnimation为250毫秒的持续时间进行动画处理。因此,每个90度的旋转将消耗250毫秒。
现在,风轮看起来已经好多了。希望这可以让你更好地理解关于Qt Quick的程序是怎么工作。
Qt的构建模块
Qt5包括大量的模块。一般来说一个模块是开发者使用的库。有些模块在Qt应用平台里是强制性的。他们形成了一套名为Qt的必备模块。也有很多模块都是可选的,并形成了Qt添加功能模块。大多数开发人员不需要使用它们,但很高兴知道它们为共同挑战提供了无价的解决方案。
三、Qt的必备模块
Qt的必备模块强制应用在Qt启用平台里。他们提供的基础开发现代Qt5应用程序使用Qt Quick 2。
核心基础模块
Qt5模块的最小集合进行QML编程。
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
Qt插件
除了必不可少的模块,Qt还提供了软件开发的附加模块,它不是发行版的一部分。以下是附加模块的一个简短的列表。
- Qt 3D
一组使3D图形编程更容易和详述的API。 - Qt Bluetooth
使用蓝牙无线技术平台的C++和QML的API。 - Qt Contacts
访问地址簿/联系人数据库的C++和QML的API。 - Qt Location
提供了位置定位、测绘、导航、位置搜索的C++和QML的API。 NMEA的后端定位。 - Qt Organizer
访问的组织事件(待办事项,事件等)的C++和QML的API - Qt Publish and Subscribe
- Qt Sensors
访问传感器的C++和QML的API。 - Qt Service Framework
使应用程序能够读取,浏览和订阅更改通知的C++和QML的API。 - Qt System Info
发现系统相关的信息和功能。 - Qt Versit
支持电子名片和的iCalendar格式 - Qt Wayland
只有Linux。包括Qt CompositorAPI(服务器)和Wayland平台插件(客户端) - Qt Feedback
触觉和声音反馈给用户操作。 - Qt JSON DB
Qt的一个无SQL对象存储。
注:
这些模块不是发行版的一部分,取决于有多少活跃的贡献者以及如何得到测试。
四、支持的平台
Qt支持多种平台。主要桌面和嵌入式平台也支持。通过Qt应用程序的抽象,如今可以则可以更容易地移植到自己的平台上。
在一个平台上测试Qt5比较耗时。一个子平台被qt-project选中来构建参考平台。这些平台通过系统测试彻底测试,以确保最佳的质量。不过提醒你:没有代码错误是免费的。
Qt项目
出自:qt-project wiki:
“Qt-Project是一个对Qt感兴趣的精英们一致认同的社区。分享乐趣的任何人都可以加入,参与决策过程,并对Qt的发展做贡献。”
Qt-Project是一个组织,利用开源让Qt更进一步。它形成了其他用户做贡献的基础。最大的功臣是DIGIA—对Qt持有商业权利。
Qt对公司有开源方面和商业方面。商业方面为那些不用或不想遵守开源许可的公司提供。如果没有商业方面,这些公司就无法使用Qt,也不会允许DIGIA为Qt-Project贡献那么多的代码。
有许多全球范围内的公司,在不同平台上使用Qt进行咨询和产品开发。有很多开源项目和开源开发者,这依赖于Qt的作为他们主要的开发库。这对成为活跃社区的一部分以及使用这些了不起的工具和库来说很棒,这会让你成为一个更优秀的人吗?也许O(∩_∩)O~)
贡献地址:wiki.qt-project
注: