QT3 和QT4的差异和转换
作者邮箱:ziyan0621@126
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()。
8) QApplication的setMainWidget方法没有了,不需要手动设置主窗口部件,似乎自动就设置好了。
9) QWidget中的setCaption()方法改成了setWindowTitle()。
10) QDialog的构造函数有变化,不再有QDialog(QWidget *, const char*)这种形式的构造函数了。
11) QLineEdit类的isOn()方法改成了isChecked()。
12) QAsciiDict<T>在Q3Support库中变为Q3AsciiDict<T>,在Qt4中由QHash<Key,T>代替,Q3AsciiDictIterator<T>由QMultiHash<Key,T>代替
13) Q3Button变为QAbstractButton,Q3Button::drawButton(QPainter*)由QWidget::paintEvent()实现
14) setPixmap()由setIcon()代替
15) Q3ButtonGroup由Qt4中QGroupBox代踢
16) Q3Cache<T>由Qt4中QCache<QString,T>代替
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<T>在Qt4中使用QHash<Key,T>和QMultiHash<Key,T>
20)Q3Header变为QHeaderView
21)QIconFactory在Qt4中被QIconEngine代替
22)QIconSet由Qt4中的QIcon代替
23)QImageDrag由Qt4中的QMimeData代替,使用QMimeData::setImage设置图片
24)Q3MainWindow由QMainWindow代替
25)QMemArray<T>,QPtrVector<T>由Qt4中的QVector<T>代替
26)Q3MimeSourceFactory由Qt4的Resource System代替
27) Q3MultiLineEdit在Qt3中继承自Q3TextEdit,在Qt4中由QTextEdit代替
28)QPtrList<T>, QPtrListIterator<T>, QPtrListStdIterator<T>在Qt3Support库,在Qt4中用QList<T>或QLinkedList<T>代替
29) Q3ValueList<T>转换为QLinkedList<T>
30)QPtrStack<T>在Qt4中由QStack<T*>代替,remove—>pop,currentop
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 ,qt listview还记得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 qt3dlltest.pro,提示一些文件将会转换,选择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文件中发现,如:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论