Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1351020
  • 博文数量: 206
  • 博客积分: 10571
  • 博客等级: 上将
  • 技术积分: 2610
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-30 11:50
文章分类
文章存档

2014年(1)

2013年(4)

2012年(18)

2010年(14)

2009年(31)

2008年(3)

2007年(135)

分类: LINUX

2009-06-25 10:18:39

Qt4与Qt3的主要不同
 
著名的QT库前一阵子升级到4.xx版本了,我目前在开发的一个基于QT3的软件,由于受到QThread的各种困扰,因此打算尝试将代码升级到QT4,但是当我实际开始升级工作后,才发现QT3QT4的变化实在是太大了,最后导致我几乎修改了程序中的所有文件,幸好目前开发工作还只是开了个头,只修改了40多个类,但那也足足花了我一周多时间,下面简单的说说QT3升级到QT4时的注意点:

 

 

1QT4中提供了大量新控件,虽然它也保持了旧的控件,并命名为Qt3XXX,但是这样的控件没准在今后的哪个QT版本中就不被支持了,所以还是换吧,控件替换的工作是巨大的,这些新的控件使用了新的方法、属性、和事件名称,虽然是比以前更规范了,但是对于升级旧代码来说,则增加了大量工作。

 

2)既然要更新控件,那么你就需要使用QDesigner工具来重新画界面了,OK,重画只是纯体力劳动,好说。

界面画好后,使用uic来根据界面生成代码文件,QT3uic可以自动生成.h.cpp文件,假设你在制作一个名叫TestDialog的对话框,那么QT3uic生成的文件则是TestDialog.hTestDialog.cpp,所有的界面初始化工作都在cpp文件中执行,之后程序的逻辑代码也将加入这个文件,那么对于一个已经完成逻辑功能的对话框来说,如果要修改界面布局,你就不得不重新用uic生成.h.cpp文件,然后将其中界面相关的代码复制到你已经修改的文件中,此时决不能直接用uic直接生成到修改过的文件上,因为那样你的代码将全部被冲掉。

这一点上,QT4进步了,因为QT4中推荐的方法是,使用uic根据界面文件生成一个h文件,以前面的TestDialog为例,生成的文件叫做ui_TestDialog.h,其中会实现一个名为Ui_TestDialog的类,包含了界面所有控件的加载功能,而程序的逻辑功能依然使用TestDialog.h,和TestDialog.cpp这两个功能,并在TestDialog.h中用多重继承的方法,从刚才的Ui_TestDialog类来继承出实际的TestDialog类,在TestDialog的构造函数中,只需要使用Ui_TestDialog::setupUi()方法,就可以构建出整个界面,并且由于是从Ui_TestDialog继承来的,在逻辑代码中也可以方便的访问所有控件。

从这一点来说,QT4的方法是个巨大的进步,因为ui_xxx.h中不再包含任何用户自己写的代码了,此时你想更改界面布局的话,只需要用QDesigner修改界面,再用uic生成ui_xxx.h文件,直接替换原文件就可以了。

当然,QTui_xxx.h文件还有其它的使用方法,不一定要使用多重继承的方法,在这里我只是介绍了我认为最方便的方法。

另外,如果你所设计的界面比较复杂,需要将某部分界面独立在其它Widget中设计和写逻辑代码,那么最上层的Dialogui_xxx.h文件还是需要手动修改的,不过相对于QT3,这样的修改还是非常简单的。

最后要指出的是,虽然是个好设计,但是由于和QT3的巨大区别,这导致了我重写所有界面相关的代码。。。。痛苦哦。

 

3QThread发生了巨大的改变,新的QThread是从QObject继承而来的,因此可以在QThread中直接使用signal/slot了,它们是线程安全的。以前的QApplication::postEvent()方法没有了,我以前实现的一整套防止线程阻塞的机制也不再需要了。不过确实是很不错进步。

 

4QSocketDevice这样的底层socket连接控件没有了,QSocket也没有了,换而之的是QTcpSocketQTcpServerQTcpSocket即可以用异步方式调用,又可以在线程中,用同步方式等待数据到达。

 

5QTh文件不再混在一起了,而是分成CoreGuiNetworkXmlOpenGL等等子文件夹,所有include都需要重写了,写成“#include ”的样子。不过相对于前面的修改来说,这些实在不足挂齿了。

 

主要的更改就这些了,最后总结一下,如果你的基于QT3的代码并没有遇到什么解决不了的功能,那么最好还是不要升级到QT4了,除非你很喜欢被折磨。。。

 

 

本文来自CSDN博客:http://blog.csdn.net/tonylk/archive/2005/12/28/564584.aspx

 

阅读(1547) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~