Qt开发入门简介
内容主要有Qt基础知识,Qt Creator的使用,Qt工程设置,Qt 程序如何打包并提交到Mac App Store,Qt Widgets程序和Qt Quick程序,生成Xcode工程。
1 Qt 基础知识
概述
Qt提供了一个跨平台(Windows, Mac OS, Linux, Android, iOS等)的应用程序开发框架,并提供了非常丰富的跨平台类库。简单来说实现方式是通过定义一套中间类库,屏蔽各个操作系统细节,从而使应用开发者绝大多数情况下只依赖Qt的类库,而很少需要了解操作系统细节。Qt并不是像Java那样利用虚拟机机制实现跨平台,而是在编译期生成在该操作系统上可运行的二进制文件,一份代码,可以在不同的操作系统上编译,从而实现代码跨平台。
开发语言
Qt的原生开发语言是C++,同时Qt在标准C++的基础上封装了自己的很多机制以方便应用开发,例如有用来代替Callback的SIGNAL/SLOT机制,也有Property机制,序列化机制等等。更强大的是,Qt不仅可以用C++开发,同时也提供了大量其他语言的绑定,例如: python、java、Lua、Ada、Ruby等等,当然也少不了大PHP,详细列表可参见: http://wiki.qt.io/Category:LanguageBindings。有人说怎么没有万能的Javascript….其实是有的,有个东西叫QML,就是用Javascript-like的语言以及CSS来描述应用的外观和行为的。
QWidget和Qt Quick
QWidget对应的是最基础的窗口和控件系统,这对于任何一个GUI应用程序都是最为基础的类库,因此在Qt诞生之初就存在。类似于Mac上Cocoa那一套。Qt Quick是Qt4.7之后引入的基于QML(类似Javascript + CSS)来快速生成动态UI的工具集,专门为移动开发优化,如果之前有Javascript和CSS开发经历,应该会对QML上手较快。
QWidget和QLayout
几乎所有GUI系统对于Widget和Layout这两个词汇都会涉及,但都会有或多或少的差别。例如,在Android系统中对应于Widget概念的 是View(Widget这个词汇在Android里边是指桌面小部件),提供了基础的绘制、事件响应和处理等功能, 对应于Layout的是ViewGroup这个概念,继承自View,也提供了绘制、事件响应和处理等功能,同时还提供了子View的管理功能,继承于 ViewGroup的LinearLayout, RelativeLayout等实现了线性的或者相对的布局等功能。再例如,iOS中相对于Widget这个概念的是UIView类,但iOS要灵活的 多,UIView既提供了绘制、事件响应,又提供了子View管理以及布局的功能。 同样在Qt的世界里也有这两个概念,相同的是QWidget也实现了绘制、事件处理等功能,但QLayout并不继承自QWidget,只是为了方便 QWidget对子Widget进行布局的一个类,所以并不实现绘制、事件处理等功能,每个QLayout最多会有一个主Widget(所谓主 Widget是指该Layout管理这个Widget的子Widget), 每个Widget也最多生成一个Layout来管理子Widget, 当然Layout和Widget都是可以嵌套的。
Qt类库
Qt常用的类库包括功能类似于STL的QMap、QList、QHash等,以及qint8, qint16,qint32,qint64等基本类型,以及非常常用的QString,QByteArray等。相信仅仅通过这些名字就能知道这些基本类 型及其类库的基本功能和使用—跟其他的标准库几乎一致。当然,QString,QByteArray也能获取到便于标准C++访问的char* 等类型的原始数据。值得一提的是QVariant这个类,它提供了一种封装基本类型甚至自定义类型的方法,可以将任意类型封装进一个QVariant实 例,并当需要时取出来或者做类型转化。
2 Qt开发环境及其搭建
因为是跨平台的,所以Qt当然可以在Mac、Windows、Linux等不同平台上开发,以及使用各个平台专有的编译器进行编译,调试器进行调试。当然,Qt也提供了对于开发客户端应用很难缺少的IDE—Qt Creator, 一个界面很清爽的集成开发环境,可以配置和自动检测各种外部工具。例如Mac版的Qt Creator会自动检测到系统有Clang编译器,从而采用Clang来编译。Qt应用程序可以选择使用qmake或者cmake等编译工具来定义编译规则,默认采用的是qmake工具。Qt Creator也可以集成Source Control工具(例如Git),这样就可以在Qt Creator来直接提交代码. Qt开发环境的搭建很简单,以Mac版举例,只需提前安装XCode,并在Qt官网下载安装Qt 的安装包即可。
Qt安装
下载地址http://www.qt.io/download-open-source/#section-2 。里面有Online和Offline安装包可以下载,直接下载安装即可,包含了Qt 库和Qt Creator,安装完成后即可使用Qt Creator进行开发。另外也可以下载Qt源码,自己编译。
随便说一下Qt的授权,上面下载安装的是LGPL版本,可以免费使用,但是只能动态链接Qt。另外还有商业版本的,授权方式比较复杂。
3 Qt Quick项目
Qt Quick和QML简介
Qt Quick是在Qt4.7中被引进的一项技术。Qt Quick 是一种高级用户界面技术。Qt Quick由Qt Quick模块提供,它是一个编写QML应用的标准库。Qt Quick模块提供了两种接口:使用QML语言创建应用的QML接口和使用C++语言扩展QML的C++接口。使用Qt Quick模块,设计人员和开发人员可以轻松地构建流畅的动态式QML用户界面,并且在需要的时候,可以将这些用户界面连接到任何C++后端。
Qt QML模块为QML语言开发应用程序和库提供了一个框架。它定义并实现了语言及其引擎架构,并且提供了一个接口,允许应用开发者以自定义类型和集成JavaScript与C++代码的方式来扩展QML语言。Qt QML模块提供了QML和C++两套接口。
QML(Qt Meta-Object Language,Qt元对象语言)是一种用于描述应用程序用户界面的声明式编程语言,类似于JavaScript,开发人员与用户界面设计人员无需任何 C++ 知识,即可用其描绘出用户界面的外观和功能。。它使用一些可视组件以及这些组件之间的交互来描述用户界面。QML 是一种高可读性的语言,可以使组件以动态方式进行交互,并且允许组件在用户界面中很容易地实现复用和自定义。QML允许开发者和设计者以类似的方式创建高 性能的、具有流畅的动画效果的、极具视觉吸引力的应用程序。QML提供了一个具有高可读性的类似JSON的声明式语法,并提供了必要的 JavaScript语句和动态属性绑定的支持。QML语言和引擎框架由Qt QML模块提供。
到这里,也许大家对QML、Qt Quick有了一定的了解,也许有的读者可能对这些概念更加模糊了。这里举个可能不是很恰当的比喻,Qt Quick之于QML,正如Qt 之于 C++,QML是Qt中开发的一个新的语言,而Qt Quick是这个语言的一个组件库,其中包含了很多用QML写的可以现成使用的组件。
创建项目
几种不同类型的程序:
Qt Widgets Application
Qt Quick Application
Qt Quick Application
Qt Quick Controls Application
Qt Canvas 3D Application
Qt Console Application
Qt Quick UI
Qt Quick Controls UI
Qt Quick Extension Plugin
main.qml文件:
import QtQuick 2.3
import QtQuick.Window 2.2
Window {
visible: true
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
Text {
text: qsTr("Hello World")
anchors.centerIn: parent
}
}
正如这段代码所示的,一个QML文档定义了一个QML对象树,由两部分组成:一个import导入部分,一个对象声明部分。
这里导入了QtQuick模块,这个就是我们前面创建项目时选择的组件集,它包含了创建用户界面所需要的基本类型和功能;而QtQuick.Window模块中提供了Window类型,它可以为Qt Quick场景创建一个顶层窗口。
这里Window窗口对象,也称为根对象。MouseArea、Text则为子对象。
4 生成XCode工程
有两种方法在XCode中使用Qt库,一是直接在XCode工程中导入Qt库,二是qt工程.pro文件生成XCode工程.xcodeproj,使用命令qmake -spec macx-xcode project.pro
5 mac上发布程序
第一步:打包
macdepolyqt命令,会把qt库打包进程序bundle。依赖的其他的动态库或者framework需要手动拷贝。macdepolyqt命令会把一些用不到的qt插件和库拷贝到程序包里面。如果不是用macdepolyqt,也可以自己写脚本或者手动拷贝,依赖路径也要手动改。
第二步:签名
使用codesign命令签名。签名后就可以用Application Loader提交。
6 参考资料
qt creator 帮助文档
http://bbs.qter.org/forum.php?mod=viewthread&tid=193
http://www.cnblogs.com/wangqiguo/p/4625611.html
Qt开发iOS应用:http://www.seanyxie.com/qt-qml移动开发之在ios上开发和部署app流程简介/