QT3和QT4的差异及代码转换方法.doc_第1页
QT3和QT4的差异及代码转换方法.doc_第2页
QT3和QT4的差异及代码转换方法.doc_第3页
QT3和QT4的差异及代码转换方法.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

QT3 和QT4的差异和转换作者邮箱: 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+R4) Qt3中一些功能在Qt4中已经废除,如: Qt3中可以添加槽函数,并将信号关联到自己添加的槽函数,uic后槽函数为虚函数, 留给用户重写。 Qt3 中可以添加C+代码的.h和.cpp文件,无需在VC中添加。5) Qt4中很多新功能, 如: 属性编辑器有过滤功能; Qt4具有强大rcc资源编译器的功能,可以将图片,文件等等加入资源qrc中,用rc 编译。6)Qt3中QLabel设置背景的方法:SetPaletteBackgroundPixmap在Qt4中变成为setPixmap7) 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和QMultiHash20)Q3Header变为QHeaderView21)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转换为QLinkedList30)QPtrStack在Qt4中由QStack代替,removepop,currentop31)在编译后生成的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(全部转换),将会产生一个portinglog.txt的移植日志文件,里面详细记录了所有文件被修改的情况。b) 用qmake tp vc 生成VC工程,可以看到代码中多了一些注释:/Added by qt3to4: 另外在Pro文件中多了:#The following line was inserted by qt3to4QT += 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 qt3to4FORMS3 += qt3test1.ui#The following line was inserted by qt3to4QT += qt3support #The following line was inserted by qt3to4CONFIG += uic3可以看出这种转换方式转换后的程序的界面仍然是Qt3的界面,不能满足移植的目的需求,因此要先把ui文件先转成Qt4的ui文件。具体转换方法有如下2种:a) 用 uic3 convert qt3test1.ui qt4test1.ui ,再将转换后的 ui名称改成和原来一样的。b) 直接用Qt4的Designer打开文件,提示文件将会从Qt3转为Qt4,确定后直接保存该文件就可以了。Ui文件转化好后再用qt3to4工具进行转换,打开pro 文件,照样可以看到:#The following line was changed from FORMS to FORMS3 by qt3to4FORMS3 += qt3test1.ui#The following line was inserted by qt3to4QT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论