Qt Link Проблема с MyClass :: metaobject VS2005

Просто перед тем, как начать, я долго искал 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:

  • Убедитесь, что QTDir включен
  • Добавьте в файлы UI компилятор UIC
  • Добавьте в Resoruce Files компилятор ресурсов
  • Добавьте к созданным Header Files компилятор MOC.

Я заметил, что мне не хватает команд MOC Build Tool, поэтому я добавил их в заголовок моего UI-файла. Однако это не изменило проблему связывания. Я прочитал, что я должен удалить все созданные файлы и сделать очистку, чтобы решить эту проблему. Это тоже не сработало.

Я проверил, и Q_OBJECT определен в классе.

Я использую VS2005 с Qt Addin. Однако я не начал новый проект для Qt, я просто использую старое решение Visual Studio / VCProj.

Есть идеи, куда идти дальше?

0

Решение

@ Камерон Стаббер вам нужен 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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]