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文件,那么这个类就可以正常使用信号与槽。

  • 相关阅读:
    SQL查询
    SQL总结(二)连表查询
    SQL总结(一)基本查询
    SQL游标、函数的使用方法
    理解 Virtual DOM(摘)及评价
    virtual DOM的作用:将DOM的维护工作由系统维护转交给virtual DOM维护
    DOM的回流和重绘(重排、重绘)
    并发编程的核心
    执行流(指令流)的控制层级
    go语言的工资好高
  • 原文地址:https://www.cnblogs.com/lcgbk/p/13281138.html
Copyright © 2011-2022 走看看