zoukankan      html  css  js  c++  java
  • undefined reference to `Spreadsheet::staticMetaObject'

    《C++ GUI Qt 4 编程》学习

    一、遇到的问题

    • 在学完第4章后,Spreasheet程序也已经写好了。在用 FindDialog 搜索时发现没有效果。

    二、解决过程

    1. 调试跟踪代码,发现 emit 信号函数后,槽函数并没有被调用,所以应该是信号和槽连接问题。
    2. 在 debug 模式下运行程序过程中,程序输出中会提示 No such slot 和 No such signa。
      已知一个类如果要用到信号和槽,需要在类定义中加 Q_OBJECT 宏。和书上代码做对比后
      发现确实少了这个宏。
    3. 添加 Q_OBJECT 宏后,运行构建,提示有错误。除了几个信号和槽函数的错误外,另外有
      “undefined reference to `Spreadsheet::staticMetaObject'” 这个错误提示。这个应该是
      moc 这个东西出问题了。搜索了一下,在 StackOverflow 上有一个类似问题。回答中指出:
      “Remember to re-run qmake every time you add or remove Q_GADGET or
      Q_OBJECT macro to get moc tool to re-generate code for meta data.” 执行 qmake后
      再执行构建,问题消除。

    三、知识点

    1. 信号和槽机制需要用到 Q_OBJECT。
    2. 修改 Q_OBJECT 等宏之后,要运行 qmake 来使 moc 重新生成 makefile。
    3. IDE(Qt Creator) 中的构建命令是指 make 命令,并不包含 qmake。
  • 相关阅读:
    数据的图表统计highcharts
    spring文件的上传和下载
    项目随笔@Service("testService")-------第二篇
    spring的四种数据源配置
    spring之interceptor篇
    spring过滤器篇
    SecurityManager篇
    Apache shiro篇
    日期工具方法
    定时器CronExpression配置说明详解
  • 原文地址:https://www.cnblogs.com/kohlrabi/p/6137123.html
Copyright © 2011-2022 走看看