Qt moc_包含文件问题

时间:2009-11-18 15:40:21

标签: c++ qt qt4

我正在尝试在http://doc.trolltech.com/4.4/mainwindows-application.html编译基本教程程序并遇到问题。

按照教程程序的方式执行操作,会产生编译错误:

In file included from debug\moc_mainwindow.cpp:10:
debug\../mainwindow.h:2: error: expected class-name before '{' token
debug\../mainwindow.h:5: error: ISO C++ forbids declaration of `Q_OBJECT' with no type

问题是需要

#include <QtGui>

教程程序将它放在mainwindow.cpp中,这是理想的方法,但它不会被复制到moc文件中。

如果我将它放入mainwindow.h中,一切正常,但在每个头文件中执行此操作都是不优雅的,并且一旦程序变大就会延长编译时间。

自教程编写以来,这是否发生了变化? (我正在使用最新的Qt 4.5.3,Windows SDK安装,从命令行编译。)我错过了什么,或者是否有任何已知的修复此问题?

3 个答案:

答案 0 :(得分:5)

在标题中包含#include <QMainWindow>就足够了。无论如何,这是必要的,因为QMainWindow是在mainwindow.h

中声明的类的基类

即使在cpp文件中(除了简单的示例/测试程序之外),使用所有和厨房接收器头文件也不是一个好主意,因为它们会不必要地减慢编译速度。

答案 1 :(得分:1)

你的头文件必须知道Qt的东西。所以没有办法避免包括QtGui。

编辑:你不应该太担心编译时间。夹杂物无论如何都会发生。也许你可以将你的标题分成没有Qt相关的部分,如果它真的很烦人。

答案 2 :(得分:1)

有时我发现moc文件变得陈旧,或者更有可能,首先不会生成。通常通过完全清理和重建项目来修复。

当使用QtCreator时,这种情况大多发生在我最初没有放入Q_OBJECT宏但稍后添加的情况下。似乎qmake步骤不会重新检查是否必须通过moc传递文件。