Название: Проблемы с moc !!! Отправлено: Natalie от Январь 11, 2006, 12:42 Расфасовала файлы в проекте по папкам.
Некоторые классы в этих новых папках используют Q_OBJECT macro. Для этих классов moc должен генерить файлы .cpp, но он (moc) этого не делает, видно не просматривает мои новые папки. :( Что мне нужно сделать, чтоб решить эту проблему? Помогите, пожалуйста!!! Название: Проблемы с moc !!! Отправлено: Steven_Orko от Январь 11, 2006, 13:04 Попробуй сначала очистить проект Build->Batch Build. Там выбираешь все, что есть и нажимаешь Clean. А потом все заново посторой. А зачем ты сама распихивала файлы по папкам? Это должно автоматом быть... В свойствах студии в закладке Qt все прописано, кажется....
Название: Проблемы с moc !!! Отправлено: ElderOrb от Январь 11, 2006, 13:04 Когда у меня была похожая ситуация всё что я сделал это поудалял из всех файлом Q_OBJECT, попробовал скомпилить - получил ожидаемую ругань, и снова подобавлял Q_OBJECT. В моём случае помогло.
Название: Проблемы с moc !!! Отправлено: Natalie от Январь 11, 2006, 13:32 В папке с моим проектом сейчас лежат все стандартные папки (такие как Debug, Generated Files...). Я создала еще одну папку (Options), в которую положила некоторое количество файлов .cpp, .h. Включила эту папку в проект (в Additional Include Directories).
Для файлов, которые находятся в корне моего проекта в процессе компиляции появляется такая строка: Moc'ing qtattempt.h... После этого начинается компиляция всех .cpp. Т.е. файлы, находящиеся не в корне (в моей папке Options), moc просто не просматривает. Что же мне надо сделать, чтоб moc их начал просматривать???? :cry: Советы по поводу удаления из всех файлов Q_OBJECT, а также очистке проекта, к сожалению :( , не увенчались успехом. :cry: P.S. Мне обязательно нужно, чтоб была эта папка Options, т.к. проект большой и надо, чтоб он выглядел аккуратно. Название: Проблемы с moc !!! Отправлено: Steven_Orko от Январь 11, 2006, 13:34 А сами файлы ты в проект включала? У меня точно также по отдельным папочкам лежал исходники в одном проекте. Я каждый файл включил в проект и все отработало
Название: Проблемы с moc !!! Отправлено: Natalie от Январь 11, 2006, 13:39 Да, конечно включила.
Сделала: Add->New Folder. А далее в нее кинула все файлы из моей папки. Название: Проблемы с moc !!! Отправлено: Steven_Orko от Январь 11, 2006, 13:45 Не понял. Ты в Solutions Explorere создала новую папку и добавила туда свои файлы???
Название: Проблемы с moc !!! Отправлено: Natalie от Январь 11, 2006, 13:48 Ага!
А что, надо было как-то по-другому? Мне в самом проекте тоже нужно, чтоб все по папкам было разложено. Название: Проблемы с moc !!! Отправлено: Racheengel от Январь 11, 2006, 13:48 а какая версия Qt и какая IDE?
Название: Проблемы с moc !!! Отправлено: Steven_Orko от Январь 11, 2006, 13:51 У меня и таким образом обрабатывается...
можешь проект переслать на почту? только без объектных файлов... Название: Проблемы с moc !!! Отправлено: Natalie от Январь 11, 2006, 13:51 Qt4.
Название: Проблемы с moc !!! Отправлено: Steven_Orko от Январь 11, 2006, 13:54 Попробуй удалить все: релиз, дебаг и генератед файс - и перекомпилируй
to Racheengel Можешь в асю ченть скинуть? я чего-то не добавил тебя в контактлист Название: Проблемы с moc !!! Отправлено: Steven_Orko от Январь 11, 2006, 16:40 Архив получил. сходу задал Rebuild.... и что вы думаете? Проект спокойно откомпилился без ошибок и даже с c Q_OBJECT. Хотя потом стал ругаться на ресурсы. но дело поправило удаление все трех каталогов, которые я писал. Вообще, Natalie, зачем ты так усложнила? если используешь qrc, то зачем пользуешься еще и rc? ИМХО, логичнее было бы что-то одно...
Название: Проблемы с moc !!! Отправлено: Natalie от Январь 11, 2006, 17:27 Не знаю как у тебя так вот вышло.
У меня с Q_OBJECT для всех классов из файлов HeaderDialogWidget и OptionsDialog появляются ошибки типа: QtAttempt error LNK2001: unresolved external symbol "public: virtual int __thiscall HeaderDialogWidget::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@HeaderDialogWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z) QtAttempt error LNK2001: unresolved external symbol "public: virtual void * __thiscall OptionsDialog::qt_metacast(char const *)" (?qt_metacast@OptionsDialog@@UAEPAXPBD@Z) У тебя при Rebuild помимо Moc'ing qtattempt.h... Moc'ing combodelegate.h... пишется Moc'ing optionsdialog.h... Moc'ing headerdialogwidget.h... ?? и в Generated Files появляются файлы moc.optionsdialog.cpp moc.headerdialogwidget.cpp ?? у меня ничего такого не происходит :( добавлено спустя 58 секунд: Не знаю как у тебя так вот вышло. У меня с Q_OBJECT для всех классов из файлов HeaderDialogWidget и OptionsDialog появляются ошибки типа: QtAttempt error LNK2001: unresolved external symbol "public: virtual int __thiscall HeaderDialogWidget::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@HeaderDialogWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z) QtAttempt error LNK2001: unresolved external symbol "public: virtual void * __thiscall OptionsDialog::qt_metacast(char const *)" (?qt_metacast@OptionsDialog@@UAEPAXPBD@Z) И при Rebuild помимо Moc'ing qtattempt.h... Moc'ing combodelegate.h... пишется Moc'ing optionsdialog.h... Moc'ing headerdialogwidget.h... ?? и в Generated Files появляются файлы moc.optionsdialog.cpp moc.headerdialogwidget.cpp ?? у меня ничего такого не происходит :( Название: Проблемы с moc !!! Отправлено: Steven_Orko от Январь 11, 2006, 18:11 В самом начале, когда ничего нет, они появляются. А потом уже до тех пор, пока я не поменяю что-то, связанное с мета-информацией в объекте. Есть предложение. Давай я поменяю твой проект, как мне кажется логичнее, а ты посмотришь, если что, подправишь под себя?
Название: Проблемы с moc !!! Отправлено: Racheengel от Январь 11, 2006, 18:21 Вообще у меня подобная проблема была. Решилось все установкой VS Integrator 1.2.0 и пересохранением всех файлов из оболочки.
Название: Проблемы с moc !!! Отправлено: Steven_Orko от Январь 11, 2006, 19:25 to Natalie:
Я тебе письмо послал с немного подправленным проектом. Посмотри почту... Название: Проблемы с moc !!! Отправлено: Mikhail от Январь 11, 2006, 20:14 to Natalie:
Решение вопроса кажется простое. Необходимо создать проектный файл - pro. Например, project.pro Выполнить "qmake project.pro", а далее nmake. Все должно получиться. Очевидно не созданы каталоги в которые moc помещает результаты своей работы. Название: Проблемы с moc !!! Отправлено: Natalie от Январь 12, 2006, 12:23 to Steven_Orko:
Большое спасибо. Но я не совсем поняла в чем заключалась проблема с мета информацией. Что из того, что ты поменял относится к решению именно этой проблемы? (а не к изменению внешнего вида проекта) Название: Проблемы с moc !!! Отправлено: Steven_Orko от Январь 12, 2006, 15:01 Насколько я понял, у тебя проблемма исчезла? Это хорошо.
Цитировать Но я не совсем поняла в чем заключалась проблема с мета информацией. Что из того, что ты поменял относится к решению именно этой проблемы? (а не к изменению внешнего вида проекта) Ну, например, как уже писал Mikhail, иногда возникает проблемма, когда нет файла проекта *.pro. К тому же я где-то в другом англоязычном формуче читал, что есть проблемма, когда используются два типа ресурсов. Что я сделал: - удалил ресурсы windows, оставил только ресурсы Qt (qrc). - создал проект Qt, удалив проект SV. - пересоздал проект VS на основе проекта Qt. - немного все систематизировал... Кстати, когды ты будешь добавлять новые ресурсы, то тебе надо стереть файл qrc_<имя файла>.cpp, если будут проблеммы с их добавляемостью в проект. Название: Проблемы с moc !!! Отправлено: Dendy от Январь 12, 2006, 17:50 Прекомпиллятор действительно иногда сбоит. Но не из-за собственньІх ошибок. Я так понимаю файл с метаинформацией бьІл добавлен в проект и компилировался. Для начала нужно бьІло глянуть его содержимое - он мог бьІть просто пустьІм. Если нет - смотреть пересоздаётся ли он (поправить заголовочник). Непересоздаваться он может, если прекомпиллятор думает, что мета-информация новей, чем сам заголовочник, такое бьІвает после игр с системньІм временем, когда проект бьІл сохранён позднее текущего времени.
Ещё не такая частая, но не менее действенная проблема - банально нет места на диске - файл создаётся, время создания вьІставляется, компиллируется, но размер ему - ноль. БьІвает и такое, что moc_ файл должен создаваться во временной папке, которой попросту не существует. В любом случае правила прекомпиллятора прописьІваются в Custom Build студии, так что всегда можно найти откуда растут ноги - смотреть в Output'е запускается ли Custom Build в принципе. И если запускается - попробовать повторить то же самое в консоли. Название: Проблемы с moc !!! Отправлено: Natalie от Январь 13, 2006, 12:36 Что-то я никак не могу понять как создать .pro файл.
В Windows Commander написала qmake -project. Файл QtAttempt.pro создался. Надо ли еще что-то сделать (как-то подключить этот файл...) ? Steven_Orko, можешь, пожалуйста, пояснить как: - создать проект Qt, удалив проект SV. - пересоздать проект VS на основе проекта Qt. Я еще никогда с этим не встречалась. Как это все проделать? добавлено спустя 23 минуты: после qmake -project сделала так: Qt->Open Solusion from .pro File и перегенерила файл QtAttempt.vsproj И все заработало. Как я поняла под - создать проект Qt, удалив проект SV. - пересоздать проект VS на основе проекта Qt. это и имелось в виду? Название: Проблемы с moc !!! Отправлено: Dendy от Январь 13, 2006, 14:08 По ходу да. Дело в том, что одним наличием файлов в проекте не ограничишься. Всё завязано на том, что прописано в Custom Build студии. Если временньІе папки из pro-файла меняются елементарно, то в студии они остаются такими какими бьІли при добавлении файла в проект. Наверное единственньІй способ перебить Custom Build - удалить и добавить заново все файльІ либо пересоздать проект из pro-файла.
Именно из-за етих непоняток не пользуюсь Qt Integration. Рекомендую взять на вооружение простой способ: - вьІделяем в проекте все h-файльІ, заходим в их свойства и пишем что-то вроде: Код: $(qtdir)/bin/moc.exe -I"$(qtdir)/include" $(InputDir)$(InputFileName) -o your_temporary_folder/moc_$(InputName).cpp - аналогично для исходников: Код: $(qtdir)/bin/moc.exe -DQT3_SUPPORT $(InputDir)$(InputName).cpp -o your_temporary_folder/$(InputName).moc - аналогично для ресурсов: Код: $(qtdir)/bin/rcc.exe -name $(InputName) $(InputDir)$(InputFileName) -o your_temporary_folder/qrc_$(InputName).cpp - аналогично для форм: Код: $(qtdir)/bin/uic.exe $(InputDir)$(InputFileName) -o your_temporary_folder/ui_$(InputName).h :D ;) Единственная нужная вещь в интеграторе - Debug Extentions, но и она делается руцями, добавив кусок кода в autoexp.dat. Название: Проблемы с moc !!! Отправлено: Natalie от Январь 13, 2006, 14:21 Большое ВСЕМ спасибо :D
Название: Проблемы с moc !!! Отправлено: Steven_Orko от Январь 13, 2006, 18:27 to Natalie:
Ну вот и разобрались в проблемме )))) to Dendy: Согласен с тобой, что в общем случае было бы гораздо лучше с разных точек зрения пользоваться своими makefile и Custom Build, причем настроенными тобою же. Но в данном случае было проще сделать выше описанные пункты, т.к. они понятнее (ИМХО). Название: Проблемы с moc !!! Отправлено: Dendy от Январь 13, 2006, 18:47 Свой Makefile - ето через чур! :D Гораздо круче наловчиться писать pro-файльІ, вот где действительно сила и кроссовость.
Жалко, что нет исходников Qt интегратора, как бьІло для Студии 6. Тогда можно бьІло легко найти ошибки и подправить. Или я чего-то не знаю... ЕдинственньІй найденньІй мной недостаток студии перед консолью - невозможность натравить злочастньІй moc на cpp-файл, ибо правило для файла можно задать только одно. Или я опять же чего-то не знаю... Название: Проблемы с moc !!! Отправлено: Steven_Orko от Январь 13, 2006, 18:56 Ну, не знаю, как в винде, но я натравливал moc в Линуксе и на хедер и на cpp. Если использовать перенаправление вывода, то создаст новый отmocаный файл. Но это я все по поводу консоли )))) :D по поводу исходников интегратора... не знаю, есть ли они, но было бы круто, если бы кто нашел )))
|