zoukankan      html  css  js  c++  java
  • 【QT】加入Q_OBJECT宏导致的error: undefined reference to `vtable for xxxxx'

    原因:
    当工程文件类中有加入Q_OBJECT宏,那么qt工程在编译的时候会生成一个moc_xxx.cpp的文件,该文件的作用是让你的QT工程能够正常使用信号与槽的机制。由于在加入Q_OBJECT宏之前,你已经编译过了工程,产生了编译文件夹(build-xxxx-Desktop_Qt_5_6_2_MinGW_32bit-Debug),此文件夹里的Makefile.Debug或者Makefile.Release文件也就已经产生。以下是加入Q_OBJECT宏之前的Makefile.Debug部分内容:
    Makefile.Debug

    SOURCES       = ..OsdGuiV_1_2main.cpp 
    		..OsdGuiV_1_2mainwindow.cpp 
    		..OsdGuiV_1_2mytabwidget.cpp 
    

    由以上内容可以看到Makefile文件并没有配置moc_xxxxx.cpp文件输出。此Makefile文件在你不删除它情况下,整个qt工程编译的过程中只会生成一次该文件。也就是此时你在类中加入Q_OBJECT宏,编译文件夹的Makefile.Debug也不会改变,不会配置moc_xxx.cpp的文件。

    解决方法:
    将编译文件夹(build-xxxx-Desktop_Qt_5_6_2_MinGW_32bit-Debug)删除,再重新编译工程即可。以下是删除编译文件夹重新编译的Makefile.Debug部分内容:
    Makefile.Debug

    SOURCES       = ..OsdGuiV_1_2main.cpp 
    		..OsdGuiV_1_2mainwindow.cpp 
    		..OsdGuiV_1_2mytabwidget.cpp 
    		..OsdGuiV_1_2font_load.cpp debugmoc_mainwindow.cpp 
    		debugmoc_mytabwidget.cpp
    

    由以上内容可以看到Makefile文件配置了moc_xxxxx.cpp文件,有了moc_xxxxx.cpp文件,那么这个类就可以正常使用信号与槽。

  • 相关阅读:
    【转】ubuntu 12.04 LTS 网络配置要点
    Sqlite3在FS_S5PC100开发板上的移植
    java中常用的字符串的截取方法
    一种很好的程序调试方法!
    win7修复MBR
    .tar.xz文件的解压
    linux环境下LED驱动编程一例
    Eclipse设置:背景与字体大小和xml文件中字体大小调整
    ARM LDR与MOV的区别
    windows下从任意目录快速进入CMD
  • 原文地址:https://www.cnblogs.com/lcgbk/p/13281138.html
Copyright © 2011-2022 走看看