QT3和QT4的差异及代码转换方法

阅读: 评论:0

2024年2月1日发(作者:)

QT3和QT4的差异及代码转换方法

QT3 和QT4的差异和转换

作者邮箱:ziyan0621@

 Designer中的区别

1) Qt3 到QT4 控件名称发生了一些变化, 如:

Qt3 ListBox+ IconView 相当于QT4 的QListWidget;

Qt3 ListView 相当于 QT4中的 QTreeWidget;

QT3 Tabele 相当于 QT4 中的 QTableWidget;

另外 QT4有基于MODEL和ITEM之分。

2) QT3 到QT4 控件外形发生了一些变化,如:

DateTimeEidt 控件,QT3用DateEdit和TimeEdit简单组合,QT4中将两者合成一体。

3) Qt4和Qt3界面操作方法上有了一些变化,如:

添加一个控件,Qt3单击添加一个或者双击批量添加,Qt4采用拖放操作。

Qt3 ctrl+T 进行运行测试,Qt4 ctrl+R

4) Qt3中一些功能在Qt4中已经废除,如:

Qt3中可以添加槽函数,并将信号关联到自己添加的槽函数,uic后槽函数为虚函数,

留给用户重写。

Qt3 中可以添加C++代码的.h和.cpp文件,无需在VC中添加。

5) Qt4中很多新功能, 如:

属性编辑器有过滤功能;

Qt4具有强大rcc资源编译器的功能,可以将图片,文件等等加入资源qrc中,用rc

编译。

6)Qt3中QLabel设置背景的方法:SetPaletteBackgroundPixmap在Qt4中变成为setPixmap

7) QHBox这种类没有了,都需要改用QHBoxLayout来布局。就是先new一个QWidget出来,然后用这个Widget的setLayout方法来加入Layout。

8) QApplication的setMainWidget方法没有了,不需要手动设置主窗口部件,似乎自动就设置好了。

9) QWidget中的setCaption()方法改成了setWindowTitle()。

10) QDialog的构造函数有变化,不再有QDialog(QWidget *, const char*)这种形式的构造函数了。

11) QLineEdit类的isOn()方法改成了isChecked()。

12) QAsciiDict在Q3Support库中变为Q3AsciiDict,在Qt4中由QHash代替,Q3AsciiDictIterator由QMultiHash代替

13) Q3Button变为QAbstractButton,Q3Button::drawButton(QPainter*)由QWidget::paintEvent()实现

14) setPixmap()由setIcon()代替

15) Q3ButtonGroup由Qt4中QGroupBox代踢

16) Q3Cache由Qt4中QCache代替

17) Q3中QPalette由3个QColorGroup对象组成,在Qt4中使用QPalette代替QColorGroup,The new QPalette still works in terms of color groups, specified through

enum values (QPalette::Active, QPalette::Disabled, and QPalette::Inactive). It also has

the concept of acurrent color group, which you can set using

QPalette::setCurrentColorGroup().

18)Q3Dict在Qt4中使用QHash和QMultiHash

20)Q3Header变为QHeaderView

21)QIconFactory在Qt4中被QIconEngine代替

22)QIconSet由Qt4中的QIcon代替

23)QImageDrag由Qt4中的QMimeData代替,使用QMimeData::setImage设置图片

24)Q3MainWindow由QMainWindow代替

25)QMemArray,QPtrVector由Qt4中的QVector代替

26)Q3MimeSourceFactory由Qt4的Resource System代替

27) Q3MultiLineEdit在Qt3中继承自Q3TextEdit,在Qt4中由QTextEdit代替

28)QPtrList, QPtrListIterator, QPtrListStdIterator在Qt3Support库,在Qt4中用QList或QLinkedList代替

29) Q3ValueList转换为QLinkedList

30)QPtrStack在Qt4中由QStack代替,remove—>pop,currentop

31)在编译后生成的ui_xx文件中,如果没有成员变量的话可以再Designer中将其属性去掉即可

32)Qt3中关于图片加载问题,可以在Qt4中通过Qt Resource System来解决。

33)QWorkspace由QMdiArea来代替

 Pro文件的区别

1) 变量发生了变化

ui文件添加INTERFACES +=变成 FORMS+=;

资源文件添加IMAGES += 变成 RESOUCES+=

库文件添加 LIBPATH 变成 QMAKE_LIBDIR

 框架发生了很多变化

1) 一些类已经废除,如:

QCString ,还记得QString::setCodecForCString, 主要是为了设置Q3CString类中的文

字的编码格式。

Q3PointArray, QMimeSource(用来加载图片资源), QPtrList(Qt3中没有QList,只能 保

存指针类型),QStrList

2) 一些类名称发生了改变,如:

QIconSet 改名为QIcon, QWorkSpace 改名为QMdiArea。QPopupMenu 变成

QMenu。

3) 一些类的功能发生了分离,如:

Qt3的QPainter 类到Qt4中分成QPainter和QPainterPath,如moveTo, lineTo等已经

放入到QPainterPath,中处理。

4) 一些类功能发生了合并,如:

QColorGroup+QPalette合并为QPalette.

5) 类的接口发生了改变,在许多类中有很多Qt 3 support members,就是原来Qt3的接

口功能,Qt4中已经废除了,只不过为了兼容Qt3还保留或者恢复了一些。

6) 类的继承关系发生了很多的变化,如:

QThread Qt3中从 Qt(在Qt4中改成了了namespace)继承,Qt4中从Object

继承,因此可以在QThread中直接使用信号和槽。

 Qt的变化给Qt3转换Qt4带来的影响

1) 类和接口等名称的改变使得转换后的代码有很多类、接口、枚举等等找不到,具体解决方法:用Qt4重写代码、用Qt 3 support 的暂时代替。

2) Qt 3 support 的接口在Qt4中通常是调用已经实现的Qt4的接口来实现的,和Qt3的实现方式存在一些区别。因此通常会出现一些和以前程序效果不一样的地方。

3) Qt在实现同一种功能的时候往往会提供多种处理方案。比如:

实现QTableWidget右击菜单,可以继承下来重写contextMenuEvent虚函

数,或者直接用addAction接口添加右击菜单菜单项,无需麻烦继承;

处理一个QWidget对象的mousePressEvent事件的时候可以继承下来处理,也可以用

QObject 提供的intallEventFilter接口交个另外一个对象处理,这样也无需麻烦继

承;

在QMenu中添加了许多QAction,要获取QAction的响应槽函数可以对每个

QAction的void triggered(bool checked = flase)信号进行关联,也可

以对QMenu的void triggered(QAction *action)信号进行关联,进行统

一的处理。

用不同方式实现会使得程序的结构不一样,因此可以自己选择来更好的优

化代码的结构。Qt3转Qt4后有很多方式可能已经不再支持,这样要彻底

转换就必须修改大量代码来改变程序的结构。

 Qt3转Qt4的经验总结

1)

转换工具:用Qt4自带的Qt3To4转换工具进行Qt3转Qt4,目前还未发现其它转换工具。

2) 无ui文件的project的转换,主要是一些动态或静态库的转换。对于Qt4的程序是不可以直接调Qt3的库的,如:Qt3库的某个接口的返回值为QString,那么Qt4是无法获取该变量的值,因为Qt4和Qt3在实现上内部内存分配方式是不一样的。具体转换过程如下:

a) 打开控制台,将目录设置到工程目录下,用qt3to4工具,具体如:

qt3to4 ,提示一些文件将会转换,选择all(全部转

换),将会产生一个的移植日志文件,里面详细记录了

所有文件被修改的情况。

b) 用qmake –tp vc 生成VC工程,可以看到代码中多了一些注释:

//Added by qt3to4:

另外在Pro文件中多了:

#The following line was inserted by qt3to4

QT += qt3support等等, 这些主要是转换后的程序用了很多Qt4提供

的兼容Qt3的一些类、接口等等。要想不使用这些兼容的功能只能手动

修改成纯Qt4的代码。

c) 修改其它一些错误,主要是Qt4不兼容Qt3的一些代码。

3) 带ui文件的project 的转换:

首先要说明Qt4有两种ui文件的编译器程序:uic和uic3,uic是Qt4

的ui编译器,uic3是保留的Qt3的ui编译器。如果采用无ui文件的

project的转换的方式,将会在pro文件中发现,如:

#The following line was changed from FORMS to FORMS3 by qt3to4

FORMS3 +=

#The following line was inserted by qt3to4

QT += qt3support

#The following line was inserted by qt3to4

CONFIG += uic3

可以看出这种转换方式转换后的程序的界面仍然是Qt3的界面,不能满足移植的目的需求,因此要先把ui文件先转成Qt4的ui文件。具体转换方法有如下2种:

a) 用 uic3 –convert > ,再将转换后的

ui名称改成和原来一样的。

b) 直接用Qt4的Designer打开文件,提示文件将会从Qt3转为Qt4,

确定后直接保存该文件就可以了。

Ui文件转化好后再用qt3to4工具进行转换,打开pro 文件,照样可以

看到:

#The following line was changed from FORMS to FORMS3 by qt3to4

FORMS3 +=

#The following line was inserted by qt3to4

QT += qt3support

#The following line was inserted by qt3to4

CONFIG += uic3

等等,此时需手动将全部FORMS3+=改成FORMS+=, 然后删除

CONFIG += uic3,这样所以ui文件就会用Qt4的uic编译器来编译了。

接下来就和无ui文件的project的转换一样了。在ui文件中存在了Qt4兼容的一些窗口和控件,可以暂时用Qt3 support的先代替,如需要可以手工依次转成纯Qt4的控件。

2012年2月5日

QT3和QT4的差异及代码转换方法

本文发布于:2024-02-01 08:15:02,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170674650235149.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:文件   转换   发生   添加
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23