QT添加QObject类(想使用信号和槽)遇到的问题汇总,亲测解决有效error: undefined reference to `vtable for xxx

126 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一:应用场景: 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编译目录,删掉,在重新编译一下,如果还不行,那就不知道了,哈哈。

五:运行成功 祝各位小伙伴运行成功,嘿嘿。