2009-11-18 72 views
0

我在編譯基本教程程序http://doc.trolltech.com/4.4/mainwindows-application.html並遇到問題。Qt moc_包含文件問題

處事教程程序做他們的方式給出一個編譯錯誤:

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 

問題是,該教程程序mainwindow.cpp這是把本作

#include <QtGui> 

需要最好的方式來做到這一點,但它不會被複制到moc文件中。

如果我把它放到mainwindow.h中,一切正常,但是在每個頭文件中這樣做都不夠好,並且一旦程序變大就會延長編譯時間。

自教程寫完以後,這是否發生了變化? (我正在使用最新的Qt 4.5.3,安裝Windows SDK,從命令行編譯。)我是否錯過了一些東西,或者是否有任何已知的解決此問題的方法?

回答

1

你的頭文件必須知道Qt的東西。所以無法避免包含QtGui。

編輯:你不應該過分擔心編譯時間。無論如何,夾雜物都會發生。如果真的讓人討厭,也許你可以把你的頭文件分成沒有Qt相關的部分。

+0

夠公平的,我可以忍受它。謝謝! – rwallace 2009-11-18 15:51:02

5

包含#include <QMainWindow>的標題應該足夠了。那就是無論如何需要,因爲QMainWindow的是基類中mainwindow.h

聲明的類的使用都和最廚房水槽頭甚至沒有cpp文件是一個好主意(除了簡單的樣品/測試程序當然),因爲它們會不必要地減慢編譯速度。

1

有時我發現moc文件過時,或者更可能不會首先生成。通常通過全面清理和重建項目來進行修復。

當使用QtCreator時,這種情況大多發生在最初的時候,我沒有把Q_OBJECT宏放入,但稍後添加了它。似乎qmake步驟不會重新檢查是否必須通過moc傳遞文件。