Просто перед тем, как начать, я долго искал SO и Google, пытаясь решить эту проблему, но безуспешно.
Я пытаюсь скомпилировать свой проект, который использовал определенную библиотеку для обеспечения функциональности графического интерфейса на основе Windows Forms. Теперь моя компания начала переходить на Qt, и я решил, что начну конвертировать свое небольшое приложение для поддержки Qt.
Сначала он вообще не будет компилироваться из-за отсутствия заголовков. Теперь, когда все отсортировано, я застрял с моим последним .exe файлом, который не может связаться из-за следующих ошибок.
Creating library Bin\VS_V8\Win32\Debug\Disp.lib and object Bin\VS_V8\Win32\Debug\Disp.exp
QtMainMenu.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall QtMainMenu::metaObject(void)const " (?metaObject@QtMainMenu@@UBEPBUQMetaObject@@XZ)
QtMainMenu.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall QtMainMenu::qt_metacast(char const *)" (?qt_metacast@QtMainMenu@@UAEPAXPBD@Z)
QtMainMenu.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall QtMainMenu::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@QtMainMenu@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
Bin\VS_V8\Win32\Debug\Disp.exe : fatal error LNK1120: 3 unresolved externals
У нашей компании есть небольшое «Qt Test App», которое было написано для того, чтобы поиграть с ним, откуда я и основал свой импорт. Я могу скомпилировать и связать это нормально. Из того, что я собрал, следующие свойства должны встречаться с файлами Qt:
Я заметил, что мне не хватает команд MOC Build Tool, поэтому я добавил их в заголовок моего UI-файла. Однако это не изменило проблему связывания. Я прочитал, что я должен удалить все созданные файлы и сделать очистку, чтобы решить эту проблему. Это тоже не сработало.
Я проверил, и Q_OBJECT определен в классе.
Я использую VS2005 с Qt Addin. Однако я не начал новый проект для Qt, я просто использую старое решение Visual Studio / VCProj.
Есть идеи, куда идти дальше?
@ Камерон Стаббер вам нужен moc
объект .. Вам нужно изменить Custom Build Step.
Ты можешь найти Custom Build Step
в заголовочном файле (который имеет Q_OBJECT) Properties
по правому клику. Затем введите эту команду;
Command Line = $(QTDIR)\bin\moc.exe -I"$(QTDIR)\include\QtCore" -I"$(QTDIR)\include\QtGui" -I"$(QTDIR)\include" -I"$(QTDIR)\mkspecs\$(QMAKESPEC)" finddialog.h -o debug\moc_finddialog.cpp
Description = MOC finddialog.h
Outputs = debug\moc_finddialog.cpp
Additional Dependencies = $(QTDIR)\bin\moc.exe;finddialog.h
Но осторожно, написав эти типы, вы должны изменить что-то здесь, как $(QTDIR)
это мои переменные окружения, вам нужно написать полную форму, где расположен ваш QT, как D:\qt_5\
а также вы должны быть осторожны finddialog
ты должен написать свой .h and .cpp
имя файла
И тогда вам нужно создать папку, щелкнув правой кнопкой мыши в обозревателе решений. Add\New Filter
.. сделать имя папки как Generated Files
И последний шаг правой кнопкой мыши Generated Files
добавить \ существующий элемент, и вы увидите папку Debug в вашем проекте решения и добавить moc_"projectName".cpp
Затем перестройте свое решение. Проблема будет решена.
Также вы должны добавить C / C ++ / Общие / Дополнительные каталоги библиотек
$(QTDIR)\include
$(QTDIR)\include\QtGui
$(QTDIR)\include\QtCore
And Link / Общие / Дополнительные каталоги библиотек
$(QTDIR)\lib
Ссылка / Вход / Дополнительные зависимости
qtmaind.lib
QtCored4.lib
QtGuid4.lib
Но не забудьте поменять $(QTDIR)
на ваш enviroment variables
или местоположение вашей папки qt. подобно D:\qt_4.7.4
Других решений пока нет …