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

本文介绍了在Qt编程中,子类继承父类使用信号和槽函数时遇到的问题及解决方法。错误主要包括vtable未定义、metaObject找不到等,解决步骤包括删除父类的QObject相关代码、在子类中正确实现Q_OBJECT宏并重新编译项目,重点是执行qmake来更新Makefile。此外,还提醒注意QObject的位置,避免错误的类继承顺序导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:应用场景:
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编译目录,删掉,在重新编译一下,如果还不行,那就不知道了,哈哈。
五:运行成功
祝各位小伙伴运行成功,嘿嘿。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小卡丘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值