今天学习QT学习之路的自定义信号槽例程,把connect中的信号和槽参数用实例化的方法去调用,发现编译报以下错误:
error: 'reader' is not a class or namespace
&reader, &reader::receiveNewspaper);
error: 'newspaper' is not a class or namespace
QObject::connect(&newspaper, &newspaper::newPaper, \
原来是没有按照例程写为
QObject::connect(&newspaper, &Newspaper::newPaper, &reader, &Reader::receiveNewspaper);
一般调用类中的方法都是先实例化,开始也不明白为什么,最后查找资料,原来QObject::connect 是一种 static 类型的方法,普通的的类的方法是
必须通过实例化的对象调用的,但是声明为 static 类型的方法是属于类的,不是属于对象的,可以直接用类名进行调用。
然后在帮助文档中发现connect没有写明是static方法,
最后去网上查资料发现,原来是moc系统中已经将函数处理,其实connect函数就是static方法。详细说明见stack overflow中说明,以下是网址:
https://stackoverflow.com/questions/29218092/where-is-qt-s-pointertomemberfunction-defined
小的知识点:
1、自定义信号槽时,如果用到自己定义的类型,必须要先用qRegisterMetaType()函数注册好,才能创立信号槽连接。