关于QT4 暂时发现的QT4和QT3的区别

关于QT4 暂时发现的QT4和QT3的区别

为了即将到来的就业问题,目前正在努力学习QT。

我买了一本QT3的书《C++ GUI QT3编程》,感觉是相当不错的一本书,不过我的系统上装的是QT4,遇到了不少麻烦。一开始以为3和4没多大区别,但是按照书上的例子去实践的时候发现 居然变化如此之大,目前看了书上的前2章,发现基本上每个例子都需要修改才能在QT4里使用,下面总结一下暂时发现的QT4和QT3的区别。

一些类和函数的变化: 
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()。

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

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

下面结合书上第2章的那个Go to Cell的例子来说一下如何编译程序。
首先设计界面,按照书上弄就行了,设计完了的窗体大概是这样的: 
关于QT4 暂时发现的QT4和QT3的区别 - 有何不可 - 不要辜负家人的期望
这个是运行时的样子,设计的时候需要把各个部件之间的连接都做好,然后保存起来,这时在保存的目录下会生成一个gotocelldialog.ui文件。然后在控制台下: 
qmake -project
qmake
make
这里只会生成一个ui_gotocelldialog.h文件,而不会编译成功的,所以从这里开始就和qt3不太一样了。
首先,你要自己动手写gotocelldialog.h和gotocelldialog.cpp,也就是说GoToCellDialog这个类是需要自己实现的,uic不能自动生成了。
实现GoToCellDialog采用的是C++中多重继承的方式,GoToCellDialog是派生类,基类是QDialog和uic在 ui_gotocelldialog.h中自动生成的Ui::GoToCellDialog。Ui是一个namespace,在 ui_gotocelldialog最后面声明。

gotocelldialog.h代码: 
#ifndef GOTOCELLDIALOG_H
#define GOTOCELLDIALOG_H

#include <qdialog.h>
#include "ui_gotocelldialog.h" //需要从这个文件里的Ui::GoToDialog

class GoToCellDialog : public QDialog, public Ui::GoToCellDialog //多重继承
{
        Q_OBJECT
public:
        GoToCellDialog(QWidget *parent = 0);
public slots:
         void enableOKButton(); //这里是自定义的slot,在Designer中无法直接定义了
};
#endif

gotocelldialog.h是GoToCellDialog类的声明,这个类是我们需要直接使用的,在这里要手动添加自定义的signal/slot。然后再写一个gotocelldialog.cpp,实现GoToCellDialog类中的各个成员函数。

gotocelldialog.cpp代码:
#include <qvalidator.h>
#include "gotocelldialog.h" //类声明的头文件,需要自己动手写


GoToCellDialog::GoToCellDialog(QWidget *parent)
        : QDialog(parent)
{
         setupUi(this); //这个非常重要,在构造函数中用这个函数来实现界面,
                    //
没有这个函数的话界面就不会被显示出来

        QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
        lineEdit->setValidator(new QRegExpValidator(regExp, this));

        connect(lineEdit, SIGNAL(textChanged(const QString&)),
                        this, SLOT(enableOKButton()));     //对于自定义的signal/slot,要手动加上连接

}

void GoToCellDialog::enableOKButton()
{
        okButton->setEnabled(lineEdit->hasAcceptableInput());
}

这样,在项目的目录下就会生成以下文件: 
gotocelldialog.ui   //设计界面后,自动生成的xml文件
gotocelldialog.h   //手写
gotocelldialog.cpp //手写

执行qmake,make之后还会生成一个ui_gotocelldialog.h,以及GoToCell.pro的工程文件,下面编写一个main.cpp生成一个QApplication对象就可以编译执行程序了。

总结一下: 
假设项目里面有一个类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大致相同。

另外,清理电脑风扇之后用KDE感觉非常的流畅,256MB内存基本没有卡的时候,秀一张我目前KDE的桌面,嘿嘿
关于QT4 暂时发现的QT4和QT3的区别 - 有何不可 - 不要辜负家人的期望


http://blog.163.com/mageng11@126/blog/static/1408083742010727114719423/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值