1.对于所有定义了信号和槽的类,在类定义开始处的Q_OBJECT宏都是必需的。
2.Qt由数个模块构成,每个模块都有自己的类库。最为重要的模块有QtCore、QtGui,QtNetWork、QtOpenGL、QtScript、QtSvg和QtXml。其中,在<QtGui>头文件中为构成QtCore和QtGui组成部分的所有类进行了定义,在程序中包含这个头文件,就能够使我们省去在每个类中分别包含的麻烦。
3.在头文件中添加<QtGui>可以,但是在一个头文件中包含一个那么大的头文件着实不是一种好的编程风格,尤其对于比较大的工程项目更是如此。在头文件中一般使用类的前置声明,(指针成员变量?),指针成员变量,没有必要在头文件中就去访问它们,因而编译程序就无须这些类的完整定义。所以可以不用包含与这及各类相关的头文件,而是可以使用前置声明,这可以使编译过程更快一些。
4.QWidget::sizeHint()函数可以返回一个窗口部件所“理想”的尺寸大小。
5.深入信号和槽:
槽和普通的C++函数几乎是一样的---可以是虚函数;可以被重载;可以是公有的;保护的或者是私有的,并且也可以被其他C++成员函数直接调用;还有,它们的参数可以是任意类型。唯一的不同是:槽还可以和信号连接在一起,在这种情况下,每当发射这个信号的时候,就会自动调用这个槽。
形式:QObject::connect(sender,SIGNAL(signal),receiver,SLOT(slot));这里的receiver和sender都是指向QObject的指针,signal和slot只包含信号和槽的名称和参数类型,不包括参数名。
还具有如下特性:
(1)一个信号可以连接多个槽
(2)多个信号可以连接同一个槽
(3)一个信号可以与另一个信号相连接
connect(lineEdit,SIGNAL(textChanged(const QString&)),this,SIGNAL(updateRecord(const QString &)));
(4)连接可以被移除
disconnect(lcd,SIGNAL(overflow()),this,SLOT(handleMathError()));
在使用信号槽时需要注意的是:
要把信号成功连接到槽,(或者链接到另外一个信号),它们的参数必须具有相同的顺序和相同的类型。
connect(ftp,SIGNAL(rawCommandReply(int,const QStirng &)),this,SLOT(processReply(int,const QString &)));
如果信号的参数比它所连接的槽的参数多,那么多余的参数将会被简单地忽略掉。
如果参数类型不匹配,或者如果信号和槽不存在,则当应用程序使用调试模式构建后,Qt会在运行时发出警告。与之相类似的是,如果在信号和槽的名字中包含了参数名字,Qt也会发出警告。
信号和槽不仅仅可以用在窗口部件之间,而是可以用于任何QObject的子类中。