相遇Qt5
- 出色的图形:Qt Quick 2基于OpenGL(ES)来构建场景视图。重写的图形堆栈提供的图形效果与易用性在这一领域达到了从未有过的一个新高度。
- 开发者生产力:QML和JavaScript是用于创建用户界面的主要手段。后端由C++驱动。JavaScript和C++之间的分割为前端开发人员集中精力创造漂亮的图形界面,后端的C++开发人员集中精力在稳定性、性能、延长运行时间提供了一个快速迭代。
- 跨平台移植:随着综合的Qt平台抽象,它现在可以更容易、更快地移植到一个更广泛的平台。Qt5围绕着Qt必备模块和附加组件,它允许操作系统开发人员专注于要领模块,并引出一个较小的运行时概念。
- 开放式开发:Qt目前在Qt-Project中真正开放。发展是开放的、社区性的。
- 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元素。
import QtQuick 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度改变随着时间的改变来进行。现在动画开始发挥作用。要启用此我们使用一个动画类型调用属性的行为,它指定定义属性的行为的每一个变化。这仅是几种类型声明一个动画。
import QtQuick 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 Core | 使用其它模块的核心非图形类 |
Qt GUI | 图形用户界面(GUI)组件的基础类,包括OpenGL的。 |
Qt Multimedia | 处理音频、视频、广播、摄像头功能的类。 |
Qt Network | 使网络编程更容易,更轻便的类。 |
Qt QML | QML和JavaScript的类 |
Qt Quick | 自定义用户界面构建高度动态的应用程序的声明性框架。 |
Qt SQL | 使用SQL集成数据库的类 |
Qt Test | 进行Qt应用程序和库单元测试的类。 |
Qt WebKit | 基于WebKit2实现的一个新的QML API类。参见Qt WebKit Widgets模块。 |
Qt WebKit Widgets | Qt4中,WebKit1和QWidget-based类。 |
Qt Widgets | 用C++部件扩展Qt图形界面的类。 |
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 Compositor API(服务器)和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
相遇Qt5的更多相关文章
- QT5利用chromium内核与HTML页面交互
在QT5.4之前,做QT开发浏览器只能选择QWebkit,但是有过使用的都会发现,这个webkit不是出奇的慢,简直是慢的令人发指,Release模式下还行,debug下你就无语了,但是webkit毕 ...
- qt5中信号和槽的新语法
qt5中的连接 有下列几种方式可以连接到信号上 旧语法 qt5将继续支持旧的语法去连接,在QObject对象上定义信号和槽函数,及任何继承QObjec的对象(包含QWidget). connect(s ...
- 记一次与a标签相遇的小事
最近做的一个项目,按钮使用的是a标签做的,样子还不错.不过正是这个a标签把我坑死了,有一个场景是点击a标签去调后台服务,为了防止用户频繁点击按钮提交,在去请求后台服务的时候肯定要先把按钮的事件给禁止掉 ...
- Ubuntu在wps-office等qt5程序下不能切换中文fcitx输入法的问题
经检查,是缺了fcitx-qt的包.比如qt5的程序,需要一个叫fcitx-libs-qt5的包. 如果您在基于qt的程序下不能使用基于fcitx的中文输入法,请检查以下包是否已安装: sudo ap ...
- qt5中文代码编码编译问题
qt中文代码用vs2010编译问题解决 总结说就是qt5默认UTF8不支持微软默认的ANSI(GB2312/GBK).解决办法是把中文字符串全部用 QString::fromLocal8Bit() 封 ...
- VS2010+Qt5.4.0 环境搭建(离线安装)
原创作者:http://blog.csdn.net/solomon1558/article/details/44084969 前言 因项目需要Qt开发GUI,我根据网上资料及自己的经验整理了搭建vs2 ...
- qt5.5程序打包发布以及依赖【转】
玩qt5也有一段时间了,惭愧的是一直没有好好的发布过程序,因为写的都是小程序没啥需要用到发布,而且qt也说不上很熟悉,本来打算到基本掌握qt之后再来研究研究怎么打包程序,最近晚上的空闲时间多了,闲着也 ...
- Qt5.5.1编译出来的程序出现libgcc_s_dw2-1.dll的解决方案
问题如图: 输入"myudp2016.exe 1 " 后出现 这是因为没有在系统环境变量path里加上相关路径,我们添加如下路径: 比如说WIN7系统-开始-计算机-右键-属性- ...
- ubuntu 16.04 + N驱动安装 +CUDA+Qt5 + opencv
Nvidia driver installation(after download XX.run installation file) 1. ctrl+Alt+F1 //go to virtual ...
随机推荐
- Uva 167 The Sultan's Successors(dfs)
题目链接:Uva 167 思路分析:八皇后问题,采用回溯法解决问题. 代码如下: #include <iostream> #include <string.h> using n ...
- lines(最大区间和)
lines Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- C 语言统计关键字出现次数
#include <stdio.h> #include <ctype.h> #include <string.h> #define NKEYS (sizeof ke ...
- 【Nginx】启动报错-端口被占用
将下载的windows版nginx的压缩包nginx-1.4.2.zip解压到F:\server\nginx-1.4.2里面. dos命令键入: F: cd F:\server\nginx-1.4.2 ...
- BZOJ 1800 fly-飞行棋
这道题其实考察的就是从其中能找到几条直径,因为这次数据范围比较小,所以只需设一个二维数组,记录一下每个点及每个点从零开始的位置,最后定一个变量记录周长,最后用个循环搜一下位置小于周长一半 ...
- Android:ListViewAdapter
MainActivity: package com.wyl.listview; import java.util.ArrayList; import java.util.HashMap; import ...
- 树莓派安装mysql
首先我想启用root用户,所以我先启用root用户: sudo passwd root 这里会提示输入两次密码,然后: sudo passwd --unlock root 这样就可以启动root登录, ...
- UVALive 3989 Ladies' Choice
经典的稳定婚姻匹配问题 UVALive - 3989 Ladies' Choice Time Limit: 6000MS Memory Limit: Unknown 64bit IO Format: ...
- c# winform 弹出确认消息框判断是否删除?
if (MessageBox.Show("确认删除?", "此删除不可恢复", MessageBoxButtons.YesNo) == DialogResult ...
- HDOJ 3790 双权值Dijkstra
#include <iostream> #include <stdio.h> #include <string.h> #include <cstring> ...