一:应用场景:
1,自己新建了一个父类,又新建了一个子类,继承了父类,想要在子类中使用信号和槽函数。结果发现connect函数不能使用。
二:实现步骤
1,添加头文件 #include
2,你的类要继承 public QObject
3,在类里面添加宏 Q_OBJECT
三:遇到问题
1,error: undefined reference to `vtable for xxxxxx(你的类名)‘。
2,error: undefined reference to xxxxx(这个是我的父类)::metaObject() const’。
3,在子类中实现的信号和槽函数,结果在使用的时候去父类中寻找槽函数,报找不到槽函数。
四:解决办法
1,既然是要在子类中使用,那就把父类中的QObject类相关的删除掉
2,在子类中把上面的实现步骤写一遍
3,既然是添加了Q_OBJECT这个宏,需要重新编译项目
4,点击qt的构建—>清理所有项目
5,清理完成之后,点击构建—>执行qmake(一定要先执行qmake,因为要把Q_OBJECT这个宏编译进去,重写Makefile),大部分人都没有执行这一步,才会异常
6,点击运行(80%的人都会成功)
7,如果运行成功,恭喜你,没有遇到一个很奇葩的bug,如果运行失败,看一下是不是我这种情况,非常神奇!
8,因为我的子类是继承的父类,所以在添加QObject类的时候,自然而然的把这个QObject写到了后面:如下图所示
9,这样执行会有问题,会报error
10,把QObject类,写到最前面,然后在重新编译就可以了,是不是很神奇
11,点击运行(99.9%的人都会成功)
12,如果你还不成功,那你在把那个实现步骤执行一遍,或者把这个类先删掉,然后重新添加一下,或者把那个build–debug/release编译目录,删掉,在重新编译一下,如果还不行,那就不知道了,哈哈。
五:运行成功
祝各位小伙伴运行成功,嘿嘿。