Qt moc_ include file problem - PullRequest
       12

Qt moc_ include file problem

0 голосов
/ 18 ноября 2009

Я пытаюсь скомпилировать базовую учебную программу на 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 install, компилирую из командной строки.) Я что-то упустил или есть какое-либо известное исправление этой проблемы?

Ответы [ 3 ]

5 голосов
/ 18 ноября 2009

Включая #include <QMainWindow> в шапке должно быть достаточно. И это в любом случае необходимо, потому что QMainWindow является базовым классом класса, объявленного в mainwindow.h

Использование заголовков «все и на кухне» не очень хорошая идея даже в файлах cpp (кроме простых примеров / тестовых программ, конечно), поскольку они без необходимости замедляют компиляцию.

1 голос
/ 18 ноября 2009

иногда я нахожу, что файлы moc устарели или, скорее всего, не генерируются вообще. обычно исправляется с полной очисткой и перестройкой проекта.

при использовании QtCreator это происходит в основном, когда сначала я не помещал макрос Q_OBJECT, а добавил его позже. похоже, что шаг qmake не перепроверяет, должен ли он пропустить файл через moc.

1 голос
/ 18 ноября 2009

Ваш заголовочный файл должен знать о Qt. Так что нет способа избежать включения QtGui.

Редактировать: Вы не должны слишком беспокоиться о времени компиляции. Включения произойдут в любом случае. Возможно, вы можете разбить свой заголовок на части, не связанные с Qt, если это действительно раздражает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...