Qt vtable error

在用Qt进行控制台编程时,很多文件不是由QtCreator自动辅助生成的。
(例如界面编程时用到的ui_xxx.h是辅助自动生成的)。
在控制台程序中同样会使用到信号和槽的机制,这是需要派生类。
#include <QObject>
class xxx:public QObject
{
Q_OBJECT
public:
xxx();
}
这时如果直接编译会报出类似错误:
“undefined reference to 'vtable for xxx”;
出现这个错误的原因和Q_OBJECT有关,在qmake生成Makefile的时候,
这个类的头文件中没有Q_OBJECT,所以相应的Makefile中没有moc xxx.h命令,
因而没有生成moc_xxx.h文件。
我们需要在项目中生成moc_xxx.h文件。
qt不会自动moc cpp文件。
生成方式之一是手动生成:
1. Windows cmd 进入到Qt的bin目录,假设qmake用的是mingw32,
则进入(假设)c:\qt\...\mingw53_32\bin
执行 moc d:\...\xxx.h -o d:\...\moc_xxx.h;
2.将moc_xxx.h添加到工程之中;
3.编译并且执行。


执行之后错误消失,并且程序能够自动运行。
疑问:删除moc_xxx.h之后,再次编译运行之后错误也是没有出现的。而且
清空debug文件夹之后仍然可以生成moc_xxx.cpp和moc_xxx.obj。原因不明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值