开源俱乐部  汤砚晗 2010.12.14 C++ GUI QT4  编程 Qt by Nokia Code less, think more
什么是 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
为什么选择 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 内核操作系统, 现已经应用于平板电脑和上网本
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  类设计的很好并易于使用。我们甚至常常不必去看文档。我们只要想出函数的名称,就会发现有一堆的函数可用。”
Qt by Nokia Qt SDK 的安装和使用 面向对象的 Qt Qt 的 signal/slot 机制 Qt 工具链的缺陷 1 2 3 4
1.Qt SDK 的安装和使用 先到网上搜索“ Qt  下载”,即可找到诺基亚官网上的下载链接 下载相应平台下的安装文件, Windows 下直接双击运行安装, linux 等一般须在终端启动之 安装完成后, Windows 平台下应当进行环境变量配置,使程序启动时能够找到库 菜单中找到 Qt Creator, 点击运行即可 (演示: Qt Creator 的应用)
Qt Creator 集成的构件 一个类 Vim 编辑器(支持语法高亮 / 自动补全 / 自动检查 / 正则表达式查找 / 代码折叠等) 一个编译器( Windows 下默认为 mingw ,其他平台通常为 g++ ) 一个调试器( Qdebug ) 版本控制系统( Git/SVN/CVS 等,需自行配置) 无处不在的文档帮助系统 assistant 窗体设计器 designer (支持控件直接拖放) 语言翻译器 linguist( 支持程序的多语言翻译) 演示例程系统 qt demo( 包含覆盖主要 Qt 应用的例程源码及文档) 程序测试编写与集成模块 若干工具链程序,甚至包括 Qt3 代码到 Qt4 代码的转换器(有人见过 VC6 转 VC.NET 的转换器了吗)
Qt 的传统用法 Qt Creator 之前,已经有一些人开发了 IDE ,如 linux 下的 KDevelop 。但是也有人喜欢直接使用 Qt 的工具链进行应用程序的构建 (演示:直接使用终端工具构建 ) 构建步骤: 建立文件夹,以工程名命名,书写源代码 目录下运行  qmake -project  ( Windows 下使用  Command Prompt 而不是操作系统自己的命令行) qmake  工程名 .pro make
面向对象的 Qt 整个 Qt 是严格按照面向对象设计思想设计和实现的,因此 Qt 类给人的感觉是很简单,易于使用, signal/slot 机制比起其他 GUI 开发库的机制更为简单灵活 但是这也意味着使用 Qt 开发程序,就不可能像 MFC 框架或者 Win32 编程那样可以不考虑设计就做出程序,你必须设计好数据流和控制流的走向,否则将来开发稍大规模的程序就容易陷入困境。 signal 和 slot 必须是类才能使用,功能完备的程序必须以类为主体,这点上类似于 java 无论是使用控件拖放产生的窗体,还是直接使用代码创建的界面,都最终使用继承或集成的方式被主体代码所使用
Qt 的 signal/slot 机制 GUI 程序与传统命令行略有不同,程序停在一个时间循环中等待用户事件,每个开发库通常都会有一套机制来响应外界的事件(如鼠标点击,键盘命令等),如 Windows 下 MFC 的消息响应机制, linux 下 GTK 的 callback 机制等。 Qt 的则为 signal/slot 机制 signal 即信号, slot 即槽,在 Qt 中他们都是以自定义函数形式存在的。任何一个类只要类体前部书写  Q_OBJECT 即可使用 Qt 的信号 / 槽机制。 假设我规定:我喊“一”,一个同学马上站起来,那么这个“一”就是我这个对象发出的信号,“站起来 " 就是这位同学(对象)的槽,而这个规定的过程,就是简单的通过一句 connect 来完成: connect( 我 ,SIGNAL( 喊一 ), 某同学, SLOT( 站起来 )); 这样以后只要我喊一,这位同学就会站起来,正如你刚才所看到的代码一样
signal 和 slot 在类体内通常声明为 void 型成员函数,允许带参数 signal  不需要实体, slot 必须要有实体,否则错误就同声明一个函数却没有实体一样,会发生链接错误 深度解释: signal/slot 机制是利用 C++ 语言实现的一个巧妙机制,本质上仍然是 C++ 。经过 connect 之后,所有发出信号的地方,在预处理过程中都会被插入相应的 slot 代码,这就完成了对 signal 的响应。 这一点决定了 Qt 程序与 MFC 等程序的决定性不同。记住这一点,将来会对你处理某些棘手问题有帮助
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 的理想平台
感谢您的关注 Opensource Club of CUMT
 

C++ gui qt

  • 1.
    开源俱乐部 汤砚晗2010.12.14 C++ GUI QT4 编程 Qt by Nokia Code less, think more
  • 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
  • 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 内核操作系统, 现已经应用于平板电脑和上网本
  • 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 类设计的很好并易于使用。我们甚至常常不必去看文档。我们只要想出函数的名称,就会发现有一堆的函数可用。”
  • 5.
    Qt by NokiaQt SDK 的安装和使用 面向对象的 Qt Qt 的 signal/slot 机制 Qt 工具链的缺陷 1 2 3 4
  • 6.
    1.Qt SDK 的安装和使用先到网上搜索“ Qt 下载”,即可找到诺基亚官网上的下载链接 下载相应平台下的安装文件, Windows 下直接双击运行安装, linux 等一般须在终端启动之 安装完成后, Windows 平台下应当进行环境变量配置,使程序启动时能够找到库 菜单中找到 Qt Creator, 点击运行即可 (演示: Qt Creator 的应用)
  • 7.
    Qt Creator 集成的构件一个类 Vim 编辑器(支持语法高亮 / 自动补全 / 自动检查 / 正则表达式查找 / 代码折叠等) 一个编译器( Windows 下默认为 mingw ,其他平台通常为 g++ ) 一个调试器( Qdebug ) 版本控制系统( Git/SVN/CVS 等,需自行配置) 无处不在的文档帮助系统 assistant 窗体设计器 designer (支持控件直接拖放) 语言翻译器 linguist( 支持程序的多语言翻译) 演示例程系统 qt demo( 包含覆盖主要 Qt 应用的例程源码及文档) 程序测试编写与集成模块 若干工具链程序,甚至包括 Qt3 代码到 Qt4 代码的转换器(有人见过 VC6 转 VC.NET 的转换器了吗)
  • 8.
    Qt 的传统用法 QtCreator 之前,已经有一些人开发了 IDE ,如 linux 下的 KDevelop 。但是也有人喜欢直接使用 Qt 的工具链进行应用程序的构建 (演示:直接使用终端工具构建 ) 构建步骤: 建立文件夹,以工程名命名,书写源代码 目录下运行 qmake -project ( Windows 下使用 Command Prompt 而不是操作系统自己的命令行) qmake 工程名 .pro make
  • 9.
    面向对象的 Qt 整个Qt 是严格按照面向对象设计思想设计和实现的,因此 Qt 类给人的感觉是很简单,易于使用, signal/slot 机制比起其他 GUI 开发库的机制更为简单灵活 但是这也意味着使用 Qt 开发程序,就不可能像 MFC 框架或者 Win32 编程那样可以不考虑设计就做出程序,你必须设计好数据流和控制流的走向,否则将来开发稍大规模的程序就容易陷入困境。 signal 和 slot 必须是类才能使用,功能完备的程序必须以类为主体,这点上类似于 java 无论是使用控件拖放产生的窗体,还是直接使用代码创建的界面,都最终使用继承或集成的方式被主体代码所使用
  • 10.
    Qt 的 signal/slot机制 GUI 程序与传统命令行略有不同,程序停在一个时间循环中等待用户事件,每个开发库通常都会有一套机制来响应外界的事件(如鼠标点击,键盘命令等),如 Windows 下 MFC 的消息响应机制, linux 下 GTK 的 callback 机制等。 Qt 的则为 signal/slot 机制 signal 即信号, slot 即槽,在 Qt 中他们都是以自定义函数形式存在的。任何一个类只要类体前部书写 Q_OBJECT 即可使用 Qt 的信号 / 槽机制。 假设我规定:我喊“一”,一个同学马上站起来,那么这个“一”就是我这个对象发出的信号,“站起来 " 就是这位同学(对象)的槽,而这个规定的过程,就是简单的通过一句 connect 来完成: connect( 我 ,SIGNAL( 喊一 ), 某同学, SLOT( 站起来 )); 这样以后只要我喊一,这位同学就会站起来,正如你刚才所看到的代码一样
  • 11.
    signal 和 slot在类体内通常声明为 void 型成员函数,允许带参数 signal 不需要实体, slot 必须要有实体,否则错误就同声明一个函数却没有实体一样,会发生链接错误 深度解释: signal/slot 机制是利用 C++ 语言实现的一个巧妙机制,本质上仍然是 C++ 。经过 connect 之后,所有发出信号的地方,在预处理过程中都会被插入相应的 slot 代码,这就完成了对 signal 的响应。 这一点决定了 Qt 程序与 MFC 等程序的决定性不同。记住这一点,将来会对你处理某些棘手问题有帮助
  • 12.
    Qt 缺陷与不足 QtCreator 是 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 的理想平台
  • 13.
  • 14.