2013-02-25 3 views
6

파이썬 인터프리터를 Qt 5 애플리케이션에 임베드하고 싶습니다.Qt 5에 파이썬 포함하기

나는 Qt는 5에서 작동하는 응용 프로그램을하지만 난 Qt는 위의 파이썬 헤더를 넣을 때

../sample/python3.3m/object.h:432:23: error: expected member name or ';' after declaration specifiers 
PyType_Slot *slots; /* terminated by slot==0. */ 
~~~~~~~~~~~  ^

로 컴파일 나누기 (Qt는 헤더 아래) 상단에

#include <Python.h> 

을 넣을 때 머리글이 깨져서

In file included from ../Qt5.0.1/5.0.1/clang_64/include/QtGui/QtGui:59: 
../Qt5.0.1/5.0.1/clang_64/include/QtGui/qpagedpaintdevice.h:63:57: error: expected '}' 
        A0, A1, A2, A3, A5, A6, A7, A8, A9, B0, B1, 
                 ^
/usr/include/sys/termios.h:293:12: note: expanded from macro 'B0' 
#define B0  0 
       ^
../Qt5.0.1/5.0.1/clang_64/include/QtGui/qpagedpaintdevice.h:62:19: note: to match this '{' 
    enum PageSize { A4, B5, Letter, Legal, Executive, 
       ^
1 error generated. 

왜 이런 일이 발생하는지 알고 계십니까? Qt와 Python이 일반적인 단어를 정의하기 때문에 나는있을 수 있습니까? 그것에 대해 무엇을 할 수 있습니까?

답변

6

Python.h 먼저 간접적으로 회전 qpagedpaintdevice.h에서의 변수 이름으로 사용하려면 0을, 수 B0을 정의하는 termios.h를 포함 포함하기 때문에이 발생합니다. Qt가 포함 된 후에 Python.h를 포함하면 '슬롯'이라는 문자열을 사용하는 것과 거의 같은 일을합니다.

나는 다음과 같은 순서를 제안한다

#include <Python.h> 
#undef B0 
#include <QWhatEver> 
2

허용 대답하는 대신 다음의 slots 멤버의 선언과 충돌이

는 Qt는 이후

이 예약 된 키워드로 slots를 사용 PyType_Spec 구조체는 Python API에 있습니다.

는 Qt는이 정상 MOC 키워드를 사용하지 않도록 지시 할 수 있으며,이 충돌을 제거합니다. 이 작업은 프로젝트 파일에 다음을 추가하여 수행됩니다. CONFIG += no_keywords

단점은 이전 키워드 대신 해당 Qt 매크로를 참조해야한다는 것입니다.

따라서 다음은 대체 쿼트 측에 필요한 것 : signals -> Q_SIGNALS slots -> Q_SLOTS emit -> Q_EMIT

이는 섹션 Using Qt with 3rd Part Signals and Slots에 신호 및 슬롯에 Qt는 문서에 설명되어있다.

추신 : Qt의를 사용하는 기존 코드 기반에 파이썬을 추가하는 것은 광범위하게 키워드를하지 않을 경우, 새 프로젝트를 시작할 때 이것은 일반적으로 좋은 방법입니다.

관련 문제