首页 > 代码库 > (转)Qt3 与 Qt4 的区别

(转)Qt3 与 Qt4 的区别

一些类和函数的变化: 
1) QHBox这种类没有了,都需要改用QHBoxLayout来布局。就是先new一个QWidget出来,然后用这个Widget的setLayout方法来加入Layout。
2) QApplication的setMainWidget方法没有了,不需要手动设置主窗口部件,似乎自动就设置好了。
3) QWidget中的setCaption()方法改成了setWindowTitle()。
4) QDialog的构造函数有变化,不再有QDialog(QWidget *, const char*)这种形式的构造函数了。
5) QLineEdit类的isOn()方法改成了isChecked()。
6) QImage构造函数有所变化。QT4中的某个构造函数如下:
  QImage m_Image=QImage(128,128,QImage::Format_ARGB32);
  这里只是生成了一个128*128的RGB的图片,里面还没内容,
  m_Image.fill( 0xFFFFFF);这样之后就是一张白色图片了。
7) 对于其他不知道怎么处理的QT3中的函数,可以在项目的.pro中增加一个
  QT += qt3support
  这样就不会报错了,我想,多少会影响程序的运行效果,至于影响多大得根据函数的功能来说了。
8) QThread发生了巨大的改变,新的QThread是从QObject继承而来的,因此可以在QThread中直接使用signal/slot了,它们是线程     安全的。以前的QApplication::postEvent()方法没有了,我以前实现的一整套防止线程阻塞的机制也不再需要了。不过确实是    很不错进步。
9) QSocketDevice这样的底层socket连接控件没有了,QSocket也没有了,换而之的是QTcpSocket和QTcpServer,QTcpSocket即可    以用异步方式调用,又可以在线程中,用同步方式等待数据到达。
10)QT的h文件不再混在一起了,而是分成Core,Gui,Network,Xml,OpenGL等等子文件夹,所有include都需要重写了,写成     "#include <QtCore/QObject>"的样子。不过相对于前面的修改来说,这些实在不足挂齿了。

Qt4 Designer的变化: 
这个Designer的变化是非常的大,主要是取消了自定义signal/slot以及编辑代码的功能,而且如何使用Designer设计出的界面来编译程序的方法也有变化。

界面的设计和以前区别不大,添加各种Widget就行了,然后在connection编辑器中设置signal/slot,不过需要注意的是,QT4 Designer的connection编辑器不能自定义slot,需要手工编写connection,具体做法后面给出

总结一下: 
假设项目里面有一个类tc。Qt4的Designer会生成一个tc.ui文件,然后需要用户手写出tc.h和tc.cpp以实现tc类(实现这两个文件需要根据后来生成的ui_c.h文件),在tc.h和tc.cpp中用户可以加入自定义的signali/slot的声明和实现。然后qmake -project来生成.pro工程文件,qmake生成Makefile,最后使用make编译。make的时候会Qt会根据tc.ui生成ui_tc.h文件,这个文件里含有tc类的基类Ui::tc,而真正的tc类则是通过多重继承实现的。
当然,如果不使用Qt Designer而是直接写代码做界面的话就没有这么麻烦,编译方法和Qt3大致相同。