Что вызывает эту ошибку QT 4.7.3? - PullRequest
6 голосов
/ 18 мая 2011

У меня есть программа, которая прекрасно компилируется в OpenSuse 11.2 с QT версии 4.5.Однако, когда я скомпилировал ту же программу, используя OpenSuse 11.4 с QT 4.7.3, я получаю это сообщение об ошибке:

"This file was generated using the moc from 4.7.3. It cannot be used with the include    files from this version of Qt. The moc has changed too much"

Может кто-нибудь сказать мне, что происходит?

Ответы [ 3 ]

8 голосов
/ 18 мая 2011

Эта ошибка возникает из-за того, что вы используете проект, скомпилированный в одной версии Qt. Основная причина этого заключается в том, что Qt использует инструмент moc, который создает клейкий код для обработки слотов сигналов и прочего.

Moc делает это путем анализа заголовочных файлов, чтобы найти определения, такие как Q_OBJECT, signal :, slot: и т. Д.

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

Этот случай верен даже для некоторых изменений в .pro, например, использование CONFIG + = no_keywords заставляет moc генерировать другой код для склеивания, позволяющий Qt работать с другими библиотеками, такими как boost, которые предоставляют механизмы слотов сигналов, используя те же ключевые слова, как Qt.

Итак, вкратце, всякий раз, когда вам нужно скомпилировать проект Qt с другой библиотекой Qt, убедитесь, что вы делаете следующее: 1. запустить: сделать чистым 2. запустить: qmake 3. запустить: сделать

это всегда даст вам чистое дерево сборки.

2 голосов
/ 17 апреля 2013

В моем случае это было потому, что я запускал "qmake" вместо "qmake-qt4"."qmake" - это, очевидно, Qt3.Я сталкивался с этим в Fedora Core 16.

Почему это не "qmake-qt3" и "qmake" соответственно, мне не подходит.

0 голосов
/ 18 мая 2011

Почему бы вам не создать новый moc, используя новую версию (в вашем случае это 4.7.3) и соответствующий заголовочный файл

   moc ****.h -o ***.moc
...