当前位置:编程学习 > wap >>

基于QT4开发与QT3开发有什么区别吗?

基于QT4开发与QT3开发有什么区别吗? --------------------编程问答--------------------  本人不才 只发现用的类有些不同 --------------------编程问答-------------------- 区别还是有的

Qt3和Qt4的区别还是很大的

好多类的API都进行了变化,有的甚至删除,有的实现方法上有变化

本人一直认为Qt4比Qt3好用点,也全面一些,毕竟是升级版本 --------------------编程问答-------------------- Qt4与Qt3的主要不同


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

2)既然要更新控件,那么你就需要使用QDesigner工具来重新画界面了,OK,重画只是纯体力劳动,好说。
界面画好后,使用uic来根据界面生成代码文件,QT3的uic可以自动生成.h和.cpp文件,假设你在制作一个名叫TestDialog的对话框,那么 QT3的uic生成的文件则是TestDialog.h和TestDialog.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文件,直接替换原文件就可以了。
当然,QT的ui_xxx.h文件还有其它的使用方法,不一定要使用多重继承的方法,在这里我只是介绍了我认为最方便的方法。
另外,如果你所设计的界面比较复杂,需要将某部分界面独立在其它Widget中设计和写逻辑代码,那么最上层的Dialog的ui_xxx.h文件还是需要手动修改的,不过相对于QT3,这样的修改还是非常简单的。
最后要指出的是,虽然是个好设计,但是由于和QT3的巨大区别,这导致了我重写所有界面相关的代码。。。。痛苦哦。

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

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

5) QT的h文件不再混在一起了,而是分成Core,Gui,Network,Xml,OpenGL等等子文件夹,所有include都需要重写了,写成 “#include <QtCore/QObject>”的样子。不过相对于前面的修改来说,这些实在不足挂齿了。

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

本文引自:http://blog.csdn.net/tonylk/archive/2005/12.aspx
--------------------编程问答-------------------- 区别就是:
一个是4,一个是3 --------------------编程问答-------------------- 区别比较大,最为明显的一个就是以前的Qt Designer是一个全能选手,既可以设计界面元素,也可以写代码并管理。而在Qt4中,Qt Designer专职界面元素设计。

还有的区别,就是3楼所说,比较丰富了。

初学者如无特殊必要的需求,建议从Qt4开始学习。但Qt3和Qt2在嵌入式开发上还是有很多市场的。 --------------------编程问答-------------------- 在我看来,最大的进步就是可以使用CSS定制GUI --------------------编程问答-------------------- Qt3 比较烂,我现在用这个开发,qt4的库大,我们板子装不下 --------------------编程问答-------------------- 但是我一直都是用qt3.3呀!! --------------------编程问答--------------------     Qt3和Qt4两个版本存在很大的差异,这也给我们使用带来了很大的挑战。下面我结合一下我在实际编程过程中遇到的问题来总结一下如何更好的使用Qt3和Qt4两个版本来进行编程。Qt的版本不断更新,现在最新的版本是4.6。

1. 首先是系统平台的差异。
 
    在win下,Qt3的代码已经很少能见到了,而且Nokia早就放弃了对Qt3的更新和支持。所以目前主要的代码都是在Qt4下,同时Qt3和Qt4在win下部署起来也比较方便,这样也就大大减弱了版本差异对我们的影响。主要还是在代码编写时候由于Qt3和Qt4类库的不同给我们带来的麻烦。 在Linux下,版本差异对我们的影响就比较大了。由于内核版本,C/C++运行库的版本不同导致了Qt3和Qt4开发的程序很难同时运行在同一台机器上。这个差别不光是在代码编写过程中,同时还包括程序运行环境。以及Qt所依赖的动态库。

2. Qt3和Qt4带来的版本差异。
 
    Qt4带来了很大的改进,新加入了很多的类,同时也在原有的类的基础上增删了很多方法或属性,这样就给我们编程带来的很大的挑战。Qt3不支持qrc资源文件、在QDesigner设计的时候图片会直接编译成二进制存放到ui文件中等等。Qt4给我们提供了qt3to4这样一个转换工具,但是这个工具的功能实在是有限的很。许多api函数未能提供转换。但是有一个推荐的做法是Qt4提供了qt3support库,使用这个库可以在Qt4下使用大部分Qt3的库,如果我们想要同时编写适应Qt3和Qt4的程序,推荐在Qt4下使用这个库。在Linux下,Qt3是无法调用Qt4下开发的程序。在运行时虽然可以动态的判断系统中的环境是Qt4还是Qt3,但是无法动态加载,因为在Linux下,这两中环境很难共存。

3. 某些控件的差异。

    比方说QLabel。在Qt3中设置背景图片的方法是:setPaletteBackgroundPixmap方法,而在Qt4中是setPixmap方法。由于这是编译时的差异,所以无法在运行时切换Qt的版本。因为API函数不一样,编译时候就确定了到底是那种版本的Qt。再比方说QThread。在Qt4中QThread继承了QObject类,这样在QThread中就可以使用Q_OBJECT来定义signal和slot。但是在Qt3中QThread没有父类,要使用signal和slot就必须让我们自己的Thread类同时继承QThread和QObject。

4. 解决方法。

    类似这些问题,我的解决方法是:通过宏定义在编译是确定QT的版本。例如:在pro文件中我们可以判断出Qt使用的版本。 greaterThan(QT_MAJOR_VERSION, 4)|equals(QT_MAJOR_VERSION,4){ QT += qt3support DEFINES += QT4 } DEFINES的功能就是给编译器添加-d参数,类似于#define QT4 这样我们就可以在程序共通过这个宏定义来进行条件编译了。看Thread部分和QLabel部分的代码: Thread部分: 
class ScanThread : 
#ifndef QT4 public QObject, 
#endif 
public QThread{}; 
QLabel部分: QPixmap pix(m_imageSrcOff);
 #ifdef QT4 setPixmap(pix); 
#else setPaletteBackgroundPixmap(pix); 
#endif 
还有一点小经验,就是在画按钮的时候,按钮的鼠标经过,鼠标按下,鼠标松开,都需要变换背景图片,制作这种复杂的按钮的时候我们最好是继承QLabel,QLabel比QPushButton更加方便我们来绘制控件的背景。 --------------------编程问答-------------------- 我也很想知道QT4可不可以移到ARM-LINUX平台上去? --------------------编程问答-------------------- 10年的帖子都被楼上挖出来了。。。qt4可以在arm-linux上运行 --------------------编程问答-------------------- 这个帖子在这这么久了还没结贴…现在Qt4被认可之后,很少有人用Qt3了… --------------------编程问答-------------------- up up, 学习学习 --------------------编程问答-------------------- 区别很大,模块还有api都有变化 --------------------编程问答-------------------- 吼吼,这个帖子有点历史了,现在该问Qt4和Qt5的区别了。 --------------------编程问答--------------------
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,