zoukankan      html  css  js  c++  java
  • QT无法解析的外部符号 "public: virtual struct QMetaObject const TPickThread::metaObject(void)const " (?metaObject@TPickThread@@UEBAPEBUQMetaObject@@XZ)

    相关资料:

    https://blog.csdn.net/ganggegel/article/details/79174307   

    问题现象:
    在写的QT程序中增加了一个线程类,并在类中写了一个信号,增加了Q_OBJECT宏,但是在编译时提示"public: virtual struct QMetaObject const TPickThread::metaObject(void)const " (?metaObject@TPickThread@@UEBAPEBUQMetaObject@@XZ)

    查找原因:
    1. 是否加上了Q_OBJECT宏?
    2. 你的widget里用到signal slot了吧?(也许是后续加的)
    3. 类定义在cpp里了? 没有相应的.h文件?
    4. 如果以前没信号槽新加的, 那么makefile需要重新生成。

    总结原因如下:
    vs在编译时会产生一系列的命令以控制该.h、.cpp文件的编译过程,并且,以后不会自动修改这些命令。
    利用Qt编程时,写好.h、.cpp文件并第一次编译之后,若.h文件中定义类时没有添加Q_OBJECT宏以及信号函数、槽函数,VS编译命令中就没有moc命令,就不会调用Qt的moc工具以生成moc_*.cpp文件;并且即使添加了Q_OBJECT宏之后,VS也不会自动添加moc命令,因而不会生成moc文件。
    VS在LINK时,找不到moc文件,就出现了error LNK2001的错误。

    解决方法:
    1.如果没有使用到信号和槽,可以去掉Q_OBJECT宏;
    2.如果要用到信号和槽,添加了Q_OBJECT,要重新make一下项目,即可

    作者:疯狂Delphi
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

    欢迎关注我,一起进步!扫描下方二维码即可加我

  • 相关阅读:
    java通过ST4使用模板字符串
    使用 docker创建redis实例并且连接
    Docker 认证成功后还是无法push构建好的镜像
    记录一次在openwrt中折腾docker
    全局模式、PAC模式、直连模式的区别
    Vue Router中调用this.$router.push() 时,location使用path无法传入params
    liunx之系统
    liunx之通配符&正则表达式
    liunx之基础
    liunx之find命令
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/14866087.html
Copyright © 2011-2022 走看看