Qt中很多类都是由QObject类派生出来的,因此它们的实例都具有QObject类对象的特征,举例如下。
1)有一个字符串形式的名称。
2)支持信号与槽机制。
3)能够过滤和接收事件。
4)支持定时器,启动定时器后每隔一定的时间发生一次定时器事件。
5)实施层次话管理,即对象间有父子关系,父对象保存了所有子对象的指针,子对象保存了父对象的指针。
6)不能使用复制构造函数和赋值操作符。
一个Qt对象类不能只是简单地继承QObject类,还必须有一些特殊的写法:
class MyObject: public QOBject
{
Q_OBJECT;
// 其他内容
};
这里,类里面的第一行是一个宏Q_OBJECT,随后是其他内容。如果只用C++编译器去编译,则这个宏等于没写。实际上,Qt有一个工具moc可以识别这个宏 ,它会为所有包含Q_OBJECT宏的类生成额外的源代码以支持Qt对象的所有特征。
注意: 如果一个类继承了QObject类,但没有使用任何Qt对象的特征,则可以不加Q_OBJECT宏。推荐在所有QObject的派生类中都加上Q_OBJECT宏。
当qmake生成Makefile时,会自动为需要moc工具处理的头文件生成相应的规则,注意它只对头文件进行处理,因此最好把类的定义放在头文件中。
Qt对象还有属性的概念,通过属性可以获得对象的一些状态值。一个属性一般对应于一个与属性同名的只读成员函数,用来获得属性的值。如果属性是bool型,则对应于的函数往往是is加上属性名。对于可写的属性,则还应有一个以set加上属性名为名称的成员函数用来设置属性的值。注意Qt的变量与函数的命名风格,一般遵循第一个单词全小写、随后的单词首字母大写的原则,因此上述函数名和属性名的大小写会有所不同。
qDebug()函数用来输出调试信息一边观察结果,它返回一个QDebug类的对象,可以使用用左移位操作符<<输出信息,默认情况下输出信息出现在标准错误输出上。
objectname()函数则是QObject类的一个成员,用于得到对象的名称。