码迷,mamicode.com
首页 > Web开发 > 详细

undefined reference to `Spreadsheet::staticMetaObject'

时间:2016-12-06 14:25:02      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:read   模式   代码   reads   机制   tool   错误   pread   输出   

《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。

undefined reference to `Spreadsheet::staticMetaObject'

标签:read   模式   代码   reads   机制   tool   错误   pread   输出   

原文地址:http://www.cnblogs.com/kohlrabi/p/6137123.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!