QT自定义控件“undefined reference to 'vtable for'”问题

由于要在控件中绘图,用到自定义控件,在自定义控件中实现绘制图形功能。

 

在wavewidget.h文件中定义类如下。

class WaveWidget:public QWidget
{
    Q_OBJECT
public:
    WaveWidget(QWidget *parent = 0);
    WaveWidget(int width = 0,int height = 0,QWidget *parent = 0);

protected:
    void paintEvent(QPaintEvent * e);
};


一直编译不通过,提示“undefined reference to 'vtable for'”错误,查遍了书籍,没有发现语法错误,去掉“Q_OBJECT”就能编译通过。但是要用到消息和槽机制,不能屏蔽掉它。
通过查看错误信息,认为是.o文件问题,清除*.o文件,重新构建项目,删除debug文件夹等手段,依旧不能解决问题。纠结了很久。
最终查找资料发现,原因是moc没有更新导致,更新*.pro文件,重新qmake一下,顺利解决。


出现此问题的原因是:

预编译器打开宏Q_OBJECT,声明若干个由moc处理(implement)的成员函数。假如得到类似于“undefined reference to vtable for LcdNumber”的编译错误,可能是忘记了执行moc,或忘记了将moc输出加入到link命令里。qmake生成Makefile的时候,这个类的头文档中并没有Q_OBJECT,所以在相应的Makefile里面并没有用moc xxx.h命令,最终导致链接失败.

 

问题总结:
在QT中,遇到有些不可思议的问题,可以从qmake、*.pro、Makefile中入手,说不定就是这其中某个语句错误引起。

 
感谢博主的分享,网址如下。
<a target=_blank href="http://blog.chinaunix.net/uid-25749806-id-2942348.html">http://blog.chinaunix.net/uid-25749806-id-2942348.html</a>
 

感概:
QT的机制还是有问题,出现此类找不到原因的问题,要解决掉还真花时间啊。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值