2011-09-01 8 views
1

고객으로부터 Visual C++ QT 기반 프로젝트를 받았습니다. QT 라이브러리를 설치 한 다음 프로젝트를 컴파일했습니다. 프로젝트는 아무 문제없이 컴파일되었습니다.Visual C++의 Q_OBJECT 문제

이제 기존 프로젝트와 함께 새로운 GUI 인터페이스를 추가해야합니다. QT 디자이너에서 GUI를 생성 한 후 VC++ 프로젝트의 소스 디렉토리에 저장했습니다. 그런 다음 새로운 GUI 용 .h 및 .cpp 파일을 작성하고이 인터페이스를 호출 할 수 있습니다. 이제 Q_OBJECT를 .h 파일에 포함시킬 때 SIGNALS 및 SLOTS를 포함해야합니다. 컴파일 오류가 있습니다.

unresolved external symbol "public: virtual struct QMetaObject const * __thiscall BetaLineServer::metaObject(void)const " (?metaObject) 

unresolved external symbol "public: virtual void * __thiscall BetaLineServer::qt_metacast(char const *)" 

unresolved external symbol "public: virtual int __thiscall BetaLineServer::qt_metacall(enum QMetaObject::Call,int,void * *)" ([email protected] 
+0

일부 파일과 같은 소리는 moc을 통과하지 않습니다. .pro 파일이 있습니까? 새 파일을 추가하고 qmake로 VC 프로젝트 재생성을 시도하십시오 – pezcode

답변

2

당신은 아마 프로젝트 파일에 .ui, .CPP 및 .H 파일을 추가해야합니다

은 오류이며, 날이 문제를 해결하는 데 도움이 바랍니다.

Qt는 ui 파일에 'moc'을 실행합니다. 누락 된 심볼을 제공하는 소스 코드를 생성합니다.

+0

감사합니다 sje397 .... 이제 작동 중입니다 ... – lankabeta

4

Q_OBJECT 매크로를 클래스에 추가 할 때마다 반드시 qmake를 재실행 한 다음 컴파일해야합니다.

+0

답장을 보내 주셔서 감사합니다 – lankabeta

+0

qmake를 어떻게 실행합니까? – Matthew

4

필요한 것은 Q_OBJECT 매크로를 포함하는 moc로 헤더 파일을 컴파일하는 것입니다. 어떻게 할 수 있을까요? > Qt는-VS 추가 기능을 설치 - 것은 여기가

  1. 는 수동 MOC 또는 UIC 파일 또는

  2. 를 컴파일하는 명령을 입력 할 수 있습니다. http://qt.nokia.com/downloads/visual-studio-add-in

    -> 이제 오픈 Visual Studio 및 here에 기술과 같은 새로운 Qt는 프로젝트를 생성 한 후

    - 아래 같은 것을 발견한다 Q_OBJECT 매크로가 포함 된 헤더 파일에>를 마우스 오른쪽 버튼으로 클릭합니다. 이 명령을 프로젝트에 복사하십시오.

    ->

    은 '명령 줄'명령에 당신과 함께 헤더 파일 이름 바꾸기 -> 한 번 컴파일하고 그 moc_xxxxx.cpp 파일을 생성한다, 당신의 프로젝트에 포함.

enter image description here

이 플러그인을 사용하여 VS에서 Qt는 프로젝트를 만드는 경우 이러한 명령을해야 나중에 참조
    1. 을 자동으로
  • +0

    또한 moc의 출력을 프로젝트에 추가하여 컴파일되도록해야합니다. –

    +0

    @Dusty : 예, 잊어 버렸습니다 – blueskin

    +0

    답장을 보내 주셔서 감사합니다. – lankabeta

    1

    는 제외 추가 .h 파일을 프로젝트에서 가져 와서 다시 포함 시키십시오 - moc_.cpp가 "Generated Files"에 나타나고 링크 오류가 사라집니다.