2013-02-25 8 views
6

में पायथन एम्बेड करना मैं एक क्यूटी 5 एप्लिकेशन में पाइथन दुभाषिया को एम्बेड करना चाहता हूं।क्यूटी 5

मैं क्यूटी 5 में काम कर रहे आवेदन किया है लेकिन जब मैं

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

साथ शीर्ष पर

#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. 

कृपया, क्या कोई जानता है कि ऐसा क्यों होता है? मैं हो सकता था क्योंकि क्यूटी और पायथन कुछ सामान्य शब्दों को परिभाषित करते हैं? मैं इसमें क्या कर सकता हूँ?

उत्तर

6

ऐसा इसलिए होता है क्योंकि Python.h सहित पहले अप्रत्यक्ष रूप से termios.h शामिल होता है, जो बी 0 को 0 से परिभाषित करता है, जो बदले में qpagedpaintdevice.h एक चर नाम के रूप में उपयोग करना चाहता है। क्यूटी के बाद Python.h सहित स्ट्रिंग 'स्लॉट' के साथ दूसरी तरफ एक ही चीज़ है।

मैं निम्न क्रम का सुझाव:

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

स्वीकार किए जाते हैं जवाब के लिए एक वैकल्पिक:

क्यूटी के बाद से एक आरक्षित कीवर्ड के रूप में slots का उपयोग करता है के slots सदस्य की घोषणा के साथ संघर्ष नहीं है पायथन एपीआई में PyType_Spec संरचना।

क्यूटी को सामान्य मोक कीवर्ड का उपयोग न करने का निर्देश दिया जा सकता है, और यह संघर्ष को हटा देगा। यह आपकी प्रोजेक्ट फ़ाइल में निम्नलिखित जोड़कर किया जाता है: CONFIG += no_keywords

दोष यह है कि आपको पिछले कीवर्ड की बजाय संबंधित क्यूटी मैक्रोज़ को संदर्भित करने की आवश्यकता होगी।

इस प्रकार निम्नलिखित प्रतिस्थापन क्यूटी पक्ष के लिए की आवश्यकता होगी: signals -> Q_SIGNALS slots -> Q_SLOTS emit -> Q_EMIT

यह खंड Using Qt with 3rd Part Signals and Slots पर संकेतों और स्लॉट पर क्यूटी डॉक्स में समझाया गया है।

पीएस: यह एक सामान्य प्रोजेक्ट शुरू करते समय सामान्य रूप से एक अच्छा विकल्प होता है, न कि मौजूदा कोड बेस पर पाइथन जोड़ते समय जो क्यूटी कीवर्ड का व्यापक रूप से उपयोग करता है।