14
开源俱乐部 汤砚晗 2010.12.14 C++ GUI QT4 编程 Qt by Nokia Code less, think more

C++ gui qt

  • Upload
    biehege

  • View
    1.556

  • Download
    7

Embed Size (px)

Citation preview

Page 1: C++ gui qt

开源俱乐部 汤砚晗

2010.12.14

C++ GUI QT4 编程

Qt by Nokia

Code less, think more

Page 2: C++ gui qt

Page P 2

什么是 QT

Qt 是 Q toolkit 的缩写, Qt 是一个跨平台的 C++ 图形用户界面库,由挪威 TrollTech 公司于 1995 年底出品。TrollTech 公司是一个伟大的小公司, TrollTech 存在期间, Qt发展成为不但包括一套跨平台图形库,而且包括若干非常方便和智能化的构建工具, 2000 年该公司发布了 Qt/Embedded linux, 如今,介绍嵌入式 linux 的书籍必定会介绍 Qt 的图形库移植。KDE 桌面环境是 linux 下一个极为绚丽的桌面系统,最初由 Qt 开发,如今 Qt 已成为 linux 下开发 C++ 图形界面的事实标准Google Earth 、 Skype 、 Photoshop Elements 等等正是使用Trolltech 公司的 Qt 工具包进行开发的

2008年 1月 28日, TrollTech公司被 Nokia以 1.53亿美元收购, Nokia随后在 2009年推出第一个官方 IDE : Qt Creator

这个幻灯片正是根据一本同名书命名的,该书最初出版于 2007年,因此没有介绍 Qt Creator

Page 3: C++ gui qt

Page P 3

为什么选择 QT ?

Qt是一个跨平台的开发框架,横跨包括Unix/Linux/Mac/Windows/Meego等常见操作系统平台,并支持如 Symbian/Window CE/ “单片机等多种嵌入式平台。 一次编写

”,随处编译 ,即同样的代码,只需在新的系统上重新编译即完成了移植,大大降低了移植成本

Qt使用标准的面向对象机制,支持使用 C++进行开发。如果使用 Qyoto和 Qt Jambi,同样可以使用 C#和 Java进行开发

Qt拥有 250个以上的 C++类,包含了无数方法,接口全部使用统一、友好的方式命名,对于一些没用过的方法不查文档也可以知道用法

Qt具有丰富的工具和帮助文档,可以实现一键查询用法 XML支持和 Webkit引擎集成 QT遵循商业和开源双重协议 被 Nokia合并后, Nokia即将以 Qt作为塞班和 meego的标准开发框架, Android是近几年才出现的名词,但是 Qt在嵌入式领域已经发展了 10年

Meego: Intel和 Nokia为了对抗 Chrome OS而开发的 linux内核操作系统,现已经应用于平板电脑和上网本

Page 4: C++ gui qt

Page P 4

Next Limit Technologies 的 RealFlow 4 移植案例

当包括迪斯尼和 Pixar 在内的制片厂和视觉效果工作室需要

生成水花飞溅、喷涌和漩涡效果时,他们常常求助于 Next

Limit Technologies 及其 RealFlow 模拟软件。

Next Limit 于 2007 年因其出色的工作赢得了奥斯卡技术

成就奖,这一成就让电影工作者可以逼真地绘制出水和其他液

体的流动。

RealFlow 最初是基于 Windows 开发的应用程序,但却受到

倾向于 Linux 的潜在客户的热捧。因此 Next Limit 没有

将 Win32 代码移植到 Linux ,而是使用 Qt 重新构建了软

件。

Next Limit 开发人员只用了两个月就将 RealFlow 移植到

Qt 。

Next Limit RealFlow 产品技术主管 Angel Tena 说“实

在是太容易了。 Qt 类设计的很好并易于使用。我们甚至常常

不必去看文档。我们只要想出函数的名称,就会发现有一堆的

函数可用。”

Page 5: C++ gui qt

Page P 5

Qt by Nokia

Qt SDK的安装和使用

面向对象的 Qt

Qt的 signal/slot机制

Qt工具链的缺陷

Page 6: C++ gui qt

Page P 6

1.Qt SDK 的安装和使用

“先到网上搜索 Qt ”下载 ,即可找到诺基亚官网上的下载链接 下载相应平台下的安装文件, Windows下直接双击运行安装,

linux等一般须在终端启动之 安装完成后, Windows平台下应当进行环境变量配置,使程序启动时能够找到库

菜单中找到 Qt Creator,点击运行即可

(演示: Qt Creator的应用)

Page 7: C++ gui qt

Page P 7

Qt Creator集成的构件

一个类 Vim编辑器(支持语法高亮 /自动补全 /自动检查 /正则表达式查找 /代码折叠等)

一个编译器( Windows下默认为 mingw,其他平台通常为 g+

+) 一个调试器( Qdebug) 版本控制系统( Git/SVN/CVS等,需自行配置) 无处不在的文档帮助系统 assistant

窗体设计器 designer(支持控件直接拖放) 语言翻译器 linguist(支持程序的多语言翻译) 演示例程系统 qt demo(包含覆盖主要 Qt应用的例程源码及文档)

程序测试编写与集成模块 若干工具链程序,甚至包括 Qt3代码到 Qt4代码的转换器(有人见过 VC6转 VC.NET的转换器了吗)

Page 8: C++ gui qt

Page P 8

Qt 的传统用法

Qt Creator之前,已经有一些人开发了 IDE,如 linux下的KDevelop。但是也有人喜欢直接使用 Qt的工具链进行应用程序的构建

(演示:直接使用终端工具构建 )

构建步骤: 建立文件夹,以工程名命名,书写源代码 目录下运行 qmake -project ( Windows 下使用 Command

Prompt而不是操作系统自己的命令行) qmake 工程名 .pro

make

Page 9: C++ gui qt

Page P 9

面向对象的 Qt

整个 Qt是严格按照面向对象设计思想设计和实现的,因此 Qt

类给人的感觉是很简单,易于使用, signal/slot机制比起其他GUI开发库的机制更为简单灵活

但是这也意味着使用 Qt开发程序,就不可能像 MFC框架或者Win32编程那样可以不考虑设计就做出程序,你必须设计好数据流和控制流的走向,否则将来开发稍大规模的程序就容易陷入困境。 signal和 slot必须是类才能使用,功能完备的程序必须以类为主体,这点上类似于 java

无论是使用控件拖放产生的窗体,还是直接使用代码创建的界面,都最终使用继承或集成的方式被主体代码所使用

Page 10: C++ gui qt

Page P 10

Qt 的 signal/slot机制

GUI程序与传统命令行略有不同,程序停在一个时间循环中等待用户事件,每个开发库通常都会有一套机制来响应外界的事件(如鼠标点击,键盘命令等),如 Windows下 MFC的消息响应机制, linux下 GTK的 callback机制等。 Qt的则为 signal/

slot机制 signal即信号, slot即槽,在 Qt中他们都是以自定义函数形式

存在的。任何一个类只要类体前部书写 Q_OBJECT即可使用Qt的信号 /槽机制。

“ ” “ ”假设我规定:我喊 一 ,一个同学马上站起来,那么这个 一“就是我这个对象发出的信号, 站起来 "就是这位同学(对象)

的槽,而这个规定的过程,就是简单的通过一句 connect来完成:

connect(我 ,SIGNAL(喊一 ),某同学, SLOT(站起来 ));

这样以后只要我喊一,这位同学就会站起来,正如你刚才所看到的代码一样

Page 11: C++ gui qt

Page P 11

signal和 slot在类体内通常声明为 void型成员函数,允许带参数

signal 不需要实体, slot必须要有实体,否则错误就同声明一个函数却没有实体一样,会发生链接错误

深度解释: signal/slot机制是利用 C++语言实现的一个巧妙机制,本质上仍然是 C++。经过 connect之后,所有发出信号的地方,在预处理过程中都会被插入相应的 slot代码,这就完成了对 signal

的响应。 这一点决定了 Qt程序与 MFC等程序的决定性不同。记住这一点,将来会对你处理某些棘手问题有帮助

Page 12: C++ gui qt

Page P 12

Qt缺陷与不足

Qt Creator是 Nokia并购 TrollTech后出品的 IDE环境,因此仍与较多问题,其中有些问题可能会对初学者造成障碍,因此这里提出一二以供参考:

目前 Qt Creator代码编辑器有时会出现自动补全失效的问题,属于正常现象(未解决的 bug只好接受了),不要急躁

Qt Creator下方的错误信息显示不完整,有时如一些链接错误的 输出信息不会被正确捕捉,建议出现诸如 Collect lld returned

-1 status这样不甚明了的信息时,在终端中手动 make一下,同样的还有运行时程序的意外退出, linux下诸如内存越界这样的

“ 问题也只会提示 application terminated unexpectedly”,像程序需要特殊权限(如 linux/unix)系统下就更不用说了

Qt跨平台的代价是需要较多的依赖库。尽管我们知道 MFC程序同样需要很多库,但是这些库都已经被微软放到系统文件夹下了,即使是现在的 .Net框架也已经是默认安装好了,但是Windows毕竟不是 Nokia的产品,所以程序要么静态编译成比较大的文件,要么带许多库。总之,不是用来编写小程序在别人电脑上直接 YY的理想平台

Page 13: C++ gui qt

感谢您的关注

Opensource Club of CUMT

Page 14: C++ gui qt

本作品采用知识共享署名 - 非商业性使用 2.5 中国大陆许可协议 进行许可。

专业交流 模板超市 设计服务

“本作品的提供是以适用知识共享组织的公共许可( 简称 CCPL” “ ” 或 许可 ) 条款为前提的。本作品受著作权法以及其他相关法律的保护。对本作品的使用不得超越本许可授权的范围。如您行使本许可授予的使用本作品的权利,就表明您接受并同意遵守本许可的条款。在您接受这些条款和规定的

前提下,许可人授予您本许可所包括的权利。

…查看全部

NordriDesign™中国专业 PowerPoint媒体设计与开发