我正在尝试在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安装,从命令行编译。)我错过了什么,或者是否有任何已知的修复此问题?
答案 0 :(得分:5)
在标题中包含#include <QMainWindow>
就足够了。无论如何,这是必要的,因为QMainWindow是在mainwindow.h
即使在cpp文件中(除了简单的示例/测试程序之外),使用所有和厨房接收器头文件也不是一个好主意,因为它们会不必要地减慢编译速度。
答案 1 :(得分:1)
你的头文件必须知道Qt的东西。所以没有办法避免包括QtGui。
编辑:你不应该太担心编译时间。夹杂物无论如何都会发生。也许你可以将你的标题分成没有Qt相关的部分,如果它真的很烦人。
答案 2 :(得分:1)
有时我发现moc文件变得陈旧,或者更有可能,首先不会生成。通常通过完全清理和重建项目来修复。
当使用QtCreator时,这种情况大多发生在我最初没有放入Q_OBJECT
宏但稍后添加的情况下。似乎qmake步骤不会重新检查是否必须通过moc
传递文件。