• 5390阅读
  • 0回复

QT的进一步学习 [复制链接]

上一主题 下一主题
离线keisuo
 

只看楼主 倒序阅读 楼主  发表于: 2007-05-28
— 本帖被 XChinux 执行加亮操作(2008-07-18) —
本文收录了互联网上关于Qt、Qte和Qtopia的介绍、开发环境及其搭建、应用编程等相关文档资源,在实际学习过程中还要多参考Qt自带的帮助文档、Qt和Qtopia中文论坛以及Trolltech公司网站的相关资料。希望能在前人的经验和官方资料的指导下,通过不断实践来加深自己的认识和理解。
    QT简体中文:http://www.qiliang.net/qt.html,包括Qt简体中文文档、Qt/Qtopia中文论坛、Trolltech公司、Qt中心(英文)、Qt论坛(英文)、Qt季刊(英文)和The Independent Qt Tutorial(在线英文电子书)等资源的链接。

    网络文章收录:
    QT简介:QT简史、QT/QTE概述;
    QT开发概览:LINUX系统中QT(qtopia)平台开发说明(文末有Qtopia应用程序的目录树)、基于Qt/Embedded和Qtopia的GUI设计;
    Qte/Qtopia的编译:
    齐亮写的Qtopia安装文档(包括PDA和Phone版本,还有Qtopia的启动脚本);
    本站资料:Qtopia开发及应用平台的搭建、Build Qtopia for x86、Build Qtopia for arm;
    嵌入式工具Qt/Qtopia的安装与使用(文章最后简要介绍了Qt应用开发过程);
    交叉编译Qtopia可能碰到的问题及解决;  
   
    Qt的信号和槽机制:
    信号和槽官方文档(中文);
    Qt的信号和槽机制介绍(IBM学习区);
    Signals and Slots学习笔记;
    Qt的信号和槽;
    Qt的内部进程通信机制。
   
   
   
QT简史Return to the Top
[来源]http://www-128.ibm.com/developerworks/cn/linux/guitoolkit/qt/overview/
于明俭, 自由撰稿人

2000 年 11 月 01 日

Qt 是一个跨平台的 C++ 图形用户界面库,由挪威 TrollTech 公司出品,目前包括Qt, 基于 Framebuffer 的 Qt Embedded,快速开发工具 Qt Designer,国际化工具 Qt Linguist 等部分 Qt 支持所有 Unix 系统,当然也包括 Linux,还支持 WinNT/Win2k,Win95/98 平台。
Trolltech 公司在 1994 年成立,但是在 1992 年,成立 Trolltech 公司的那批程序员 就已经开始设计 Qt 了,Qt 的第一个商业版本于 1995 年推出然后 Qt 的发展就很快了,下面是 Qt 发展史上的一 些里程碑:

1996 Oct KDE 组织成立
1998 Apr 05 Trolltech 的程序员在 5 天之内将 Netscape5.0 从 Motif 移植到 Qt 上
1998 Apr 08 KDE Free Qt 基金会成立
1998 Jul 09 Qt 1.40 发布
1998 Jul 12 KDE 1.0 发布
1999 Mar 04 QPL 1.0 发布
1999 Mar 12 Qt 1.44 发布
1999 Jun 25 Qt 2.0 发布
1999 Sep 13 KDE 1.1.2 发布
2000 Mar 20 嵌入式 Qt 发布
2000 Sep 06 Qt 2.2 发布
2000 Oct 05 Qt 2.2.1 发布
2000 Oct 30 Qt/Embedded 开始使用 GPL 宣言
2000 Sep 04 Qt free edition 开始使用 GPL
基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西,但是 Qt 具有下列优点:

优良的跨平台特性:
Qt支持下列操作系统: Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, HP-UX, Digital UNIX (OSF/1, Tru64), Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等等。

面向对象
Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件 之间的协同工作变得十分简单。

丰富的 API
Qt 包括多达 250 个以上的 C++ 类,还替供基于模板的 collections, serialization, file, I/O device, directory management, date/time 类。甚至还包括正则表达式的处理 功能。

支持 2D/3D 图形渲染,支持 OpenGL

大量的开发文档

XML 支持

但是真正使得 Qt 在自由软件界的众多 Widgets (如 Lesstif,Gtk,EZWGL,Xforms,fltk 等等)中脱颖而出的还是基于 Qt 的重量级软件 KDE 。 有趣的是,KDE 也是使得 Trolltech 公司承受巨大压力的一个原因。下面我们将来看看这场 著名的自由软件圣战 -- "KDE/QT .VS. Gnome/Gtk" 是怎么发生的。

在 Unix 的图形界面一向是以 MIT 的 X Window 系统为标准, 可是在商业应用上有两大流派,一派是以 Sun 公司领导的 Openlook 阵营,一派是 IBM/HP 领导的OSF (Open Software Foundation) 的 Motif, 双方经过多年竞争之后, Motif 最终胜出,成为最普遍使用的界面库, 后来双方又妥协出一个 CDE(Common Desktop Enviroment) 作为一个标准的图形界面。 但是 Motif/CDER 的价格非常昂贵,在这同时微软的 Windows 图 形界面发展速度非常快,而 Unix 界的后起之秀 Linux 也急需一个可靠并且免费的图形界面。

1996 年 10 月,由开发图形排版工具Lyx的德国人 Matthias Ettrich 发起了 KDE 计划。 KDE 的全称为 K Desktop Environment,可以看出是针对 CDE。 KDE 本身 是采用 GPL 宣言的,但是 KDE 却是使用 Qt 来作为其底层库,因为当时 Qt 已经将其 Unix 版本自由发布了,但是 Qt 并不遵循 GPL, 因此 KDE 被很多自由软件的作者攻击,认为利用非自 由软件开发违背了 GPL 的精神,于是 GNU 的狂热信徒兵分两路,一路是去制作 Harmonny,试图重写一套兼容于 Qt 的替代品,另一路是由一个 26 岁的墨西哥程序员 Miguel De Icaza 领导 下重新开发一套叫 GNOME(GNU Network Object Enviroment)来替代 KDE。

由于 Linux 界的老大 RedHat 不喜欢 KDE/Qt 的版权,因此 RedHat 甚至专门派出了几个全职程序员来加入 GNOME 进行开发工作,于是一场同 Motif VS Openlook 相似的圣战就这么打起来了。 Trolltech 为了 KDE 曾数次修改 Qt 的版权,从成立 KDE Free Qt 基 金会到采用 QPL,可谓是费尽心机,但是 GNOME 采用的 GTK 一开始就是完全的 GPL,因此在这个方 面 GNOME 有一定的优势,加上 Qt/KDE 采用 C++ 开发,入门的门槛比较高,而 GTK/Gnome 采用 C, 因此 GNOME 吸引了更多的自由软件开发者,但是 KDE 毕竟先走了一步, 推出的 KDE1.1.2 十分稳定, 而当时急忙中推出的 GNOME1.0 的系统稳定性奇差,有人甚至笑称 GNOME1.0 还没有 KDE 1.0 Alpha 稳定。但是 GNOME 后来发展比较快,大有迎头赶上的势头。当时双方的开发者在网络 上炒得天翻地覆,连 Linux 之父 Linus 只是说了一句喜欢用 KDE 都倍受指责。

战争到了第三个年头,也就是2000年,可谓是风云突变,一个接一个重大的事件先后发生: 首先是一批从 Apple 公司出来的工程师成立了一个叫 Eazel 的公司替 GNOME 设计界面,然后是一批 GNOME 程序员成立了一个 Helix Code 公司替 GNOME 提供商业支持,而大家期待以久的 KDE 2.0 也终于发布了,这恐怕是目前最为庞大的自由 软件了之一, 除了 KDE 本身,还包括 Koffice 套件,和集成开发环境 Kdevelop 等等大批软件,其主力软件 Kounqueror 也是第一个可以同微软的 Internet Exploer 相抗衡的浏览器。 而 Sun 公司,Red Hat 公司, Eazel 公司,Helix Code 等一批公司成立了一个GNOME 基金会, Sun 还宣布将把重量级办公软件 Star office 同 GNOME 集成, Trolltech 公司自然不能坐以 待毙,于今年 10 月 4 日将 Qt 的 free edition 变为 GPL 宣言,彻底解决了 KDE 的版权问题, 又推出了嵌入式 Qt ,给了 GNOME 阵营一个有力的回击。

到现在为止,这场战争还在继续,相信我们不能很快看到结果。一般说来, 目前 GNOME 吸引的公司比较多,但是 KDE/Qt 的开发的效率和质量比 GNOME 高,而且在 Office/嵌入式 环境中先走一步,在一定时间内还将处于优势地位。

那么对于用户来说,如何在 Qt/GTK 中作出选择呢?一般来说,如果用户使用 C++,对库的稳定性,健壮性要求比较高,并且希望跨平台开发的话,那么使用 Qt 是较好的选择, 但是值得注意的是,虽然 Qt 的 Free Edition 采用了 GPL 宣言,但是如果你开发 Windows 上的 Qt 软件或者是 Unix 上的商业软件,还是需要向 Trolltech 公司支付版权费用的。

LINUX系统中QT(qtopia)平台开发说明Retrun to Top
    =================================
        黄德智(compiler_hdz@hotmail.com)
            V:1.0
        日期:20060305
        QT 版本 :20060106V2

一、开发包的获取
================

    最新的qtopia开发包名称为:qtopia_dev20060106V2.tar.gz;
当前版本为20060106V2,大小大约为 246M。

    当前和后续版本也可在 东信 的FTP网站上下载得到.

二、开发环境的搭建
==================

    qtopia开发包运行于LINUX操作系统上,LINUX要求内核版本为2.4.18或以上。安装LINUX操作系统,
如果只是在PC机上进行模拟器上的开发和交叉编译,可将LINUX安装到虚拟机上。将LINUX安装到虚拟机上,
建议硬盘空间最少分配6G,因为开发环境的搭建需要很大空间。

1、qtopia开发包的安装步骤:
    (1)、将qtopia_dev.tar.gz放到/opt/目录下
        建议放在/opt/目录下,如果需要将开发包放到其他的目录,则解压后需要修改
qtopia-phone-2.1.1/src/下的config.pri文件。
    (2)、用命令tar解压
        在LINUX终端中CD到/opt/目录下,输入命令 tar -zxf qtopia_dev.tar.gz (回车),
几分钟后解压结束,出现命令提示符,如果报找不到什么目录或找不到什么文件,输入命令“df -m”
查看硬盘使用情况,一般原因是硬盘空间不足,解压失败,删除硬盘上不需要的文件或重新安装LINUX操作
系统,把分配硬盘空间更大。
    (3)、解压后生成的目录为qtopia_dev

2、交叉编译工具的安装步骤:

    (1)、将cross2compiler.tar.gz放到/opt/目录下
    (2)、用命令tar -zxf cross2compiler.tar.gz 解压
    (3)、解压后生成的目录为debugdir
    交叉编译工具的安装是为了编译出在真机上运行的可执行文件,如果只是在模拟器上开发,可不
进行交叉工具的安装。

三、模拟器上开发
================

1、配置文件和全局变量的设置:
    (1)、将.../qtopia_dev/.../x86/Settings目录放到/root/目录下,如果已经有/root/Settings目录,
则进行覆盖。
    (2)、进入qtopia_dev/.../.../x86/目录。(中间目录省略)
    (3)、运行 ./setenv 设置环境变量,或source setenv命令。

2、编译例子工程:
     在目录.../qtopia_dev/20060106V1102/x86/qtopia-phone-2.1.1/examples/application/下有一个名为
application的示例工程,对该工程进行编译和安装,可在模拟器中看到运行效果。
    编译步骤:
    (1)、进入qtopia_dev/.../.../x86/qtopia-phone-2.1.1/examples/application目录;
    (2)、运行qmake生成Makefile 文件;
    (3)、运行make install 进行编译和安装。

3、模拟器上查看运行效果:
    (1)、进入.../qtopia_dev/20060106V1102/x86/目录
    (2)、运行./rn.dat 启动模拟器

4、各个文件安装路径:
    (1)、所有编译后的程序放在
qtopia_dev/.../.../x86/qtopia-phone-2.1.1/image/opt/Qtopia/bin/目录下;
    (2)、程序相应的desktop文件放在
qtopia_dev/.../.../x86/qtopia-phone-2.1.1/image/opt/Qtopia/apps/Application/目录下
    (3)、所有的程序图标放在qtopia_dev/.../.../x86/pia-phone-2.1.1/image/opt/Qtopia/pics/程序名/目录下

5、示例工程中的各个文件

    (1)、application.pro文件
    该文件中指定工程中用到的各个文件,文件包括:源代码文件(.c .cpp .h)、资源文件名、目标文件名、
desktop文件及路径、图标文件及路径、帮助文件及路径。
    qmake命令在执行过程中访问application.pro文件将生成Makefile文件。
   
    (2)、example.desktop文件
    该文件将安装到模拟器和真机上,为了在运行时找到工程的各个文件。

    (3)、example.control文件
    文件中指定了工程的可执行文件路径、desktop文件路径、帮助文件路径和图标文件路径。
    这个文件我现在还没有搞清楚:)

    (4)、examplebase.ui文件
    该文件中以XML的格式定义了可视窗口上的各个部件。

    (5)、其它文件
    example.html和Example.png分别是工程的帮助文件和图标文件。

6、建立自己的工程

(1)、在示例工程的基础上建立自己的工程:
    新建一个自己工程的目录,将示例工程中的相关文件复制到该目录,在示例工程的基础上进行修改。
需要复制的文件有:main.cpp、application.pro、example.control、example.cpp、example.h、example.desktop、
examplebase.ui、Example.png、example.html。

(2)、修改事项:
    application.pro文件:
    A、“application.pro”文件以.pro为扩展名,文件名要和它所在的目录名相同;
    B、11行,写上所有工程中用到头文件,文件名之间用空格隔开;
    C、12行,写上所有工程中用到.c或.cpp文件,文件名之间用空格隔开;
    D、13行,可视窗口文件名;
    E、14行,生成可执行文件名(目标文件名);
    F、18行,.desktop文件名;
    G、22行,图标文件名;
    H、23行,图标路径名,以目标文件名为目录名;
    I、26行,说明文件名;

    .desktop文件
    A、7行,可执行文件名;
    B、8行,图标文件名;

    .ui文件,该文件可用QT开发环境修改,也可用文本编辑器修改,
    A、第2行,<class>ExampleBase</class>,“ExampleBase”可修改,但一定要与example.h文件的25行父类名称一致;

    main.cpp文件
    A、该文件名不修改;
    B、21行,修改包含的头文件名;
    C、24行,修改类名;

(3)、编译自己的工程
    A、生成Makefile文件,在工程的目录下,运行qmake命令;
    B、编译,在工程的目录下,运行make命令;
    C、安装,在工程的目录下,运行make install命令;

四、为真机上运行进行编译
========================
    将代码用arm编译器进行编译,目标文件就可在真机上运行。
    1、必须进行交叉编译工具的安装;
    2、将工程目录复制到.../qtopia_dev/20060106V1102/arm/qtopia-phone-2.1.1/目录下;
    3、编译;

五、将文件安装到真机上
======================
1、设备间的软件连接:
连接步骤:
    (1)、连接好个连线
    (2)、启动PC到LINUX系统中
    (3)、关闭防火墙(service iptables stop)
    (4)、挂载进QT的开发包(mount /dev/hda4 /mnt/win)
    (5)、手动加载usbdnet.o(进入/mnt/win目录下,执行install),并在终端确认模块已经加载
    (6)、启动(重起)nfs(service nfs restart)
    (7)、启动minicom(#minicom)
    (8)、到/home/目录下,执行脚本pc_linux
    (9)、在终端启动USB设备(ifconfig usb0 192.168.254.1 up)
    (10)、在minicom窗口中执行/home/目录下的linuxrc_run脚本
    (11)、在minicom窗口中执行/home/目录下的脚本pc_linux
    (12)、检查目录/mnt/,是否和目录/opt/p2fs下的内容一致,若一致,则成功

这里提供几个诊断连接成功的方法:

pc启动候,通过lsmod|grep usbdnet看看模块是否存在,如果不存在,请手动通过./install加载

如果以上都正确,连接手机,如果ifconfig -a 能看到设备而ifconfig 看不到,请按照文档设置ip并激活。

2、文件安装目录:
    将编译好的程序、desktop文件和图标放在手机上/opt/Qtopia/各自对应的目录下。

    (1)、所有编译后的程序放在
qtopia_dev/.../arm/qtopia-phone-2.1.1/image/opt/Qtopia/bin/目录下

    (2)、程序相应的desktop文件放在
qtopia_dev/.../arm/qtopia-phone-2.1.1/image/opt/Qtopia/apps/Application/目录下

    (3)、所有的程序图标放在
qtopia_dev/.../arm/qtopia-phone-2.1.1/image/opt/Qtopia/pics/程序名/ 目录下

3、重起手机。

六、手机目录:
    /            (根目录)
    |----bin
    |----lib
    |----home
    |----mnt        (对应于PC机的/opt/p2fs目录,该目录结构可随意)
    |
    |----opt
    |    |----Qtopia
    |        |----bin    (放编译后的程序)
    |        |----etc   
    |        |----pics    (放图标文件)
    |        |----apps   
    |                |--Applications    (放desktop文件)
    |               
    |----Applications    (该目录结构任意,可存放工程自己的文件)


结束
====

Return to Top
[ 此贴被XChinux在2008-07-18 16:38重新编辑 ]
快速回复
限100 字节
 
上一个 下一个