您的位置:首页 > Web前端

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

2014-12-05 15:06 197 查看
由于要在控件中绘图,用到自定义控件,在自定义控件中实现绘制图形功能。

在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的机制还是有问题,出现此类找不到原因的问题,要解决掉还真花时间啊。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: