2011-05-18 18 views
6

मेरे पास एक प्रोग्राम है जो क्यूटी संस्करण 4.5 के साथ ओपनस्यूज 11.2 में बस ठीक है।इस क्यूटी 4.7.3 त्रुटि का कारण क्या है?

"This file was generated using the moc from 4.7.3. It cannot be used with the include files from this version of Qt. The moc has changed too much" 

किसी को भी मुझे बता सकते हैं क्या हो रहा है: हालांकि, जब मैं क्यूटी 4.7.3 के साथ OpenSuse 11.4 का उपयोग कर एक ही कार्यक्रम संकलित, मैं इस त्रुटि संदेश मिल रहा?

+1

क्या आपने पहले जेनरेट की गई फ़ाइलों को हटाने के लिए "साफ करें" करने की कोशिश की है और उसके बाद "मेक" फिर से चलाना है? – Mat

+4

क्या आप वाकई क्यूटी के पुराने संस्करण से शामिल किसी भी तरह से उपयोग नहीं कर रहे हैं? – Bart

+1

एक साफ चेकआउट के साथ प्रयास करें/सभी moc _ /। Moc फ़ाइलों को हटाएं, qmake 4.7.3 पुन: चालू करें और करें। –

उत्तर

8

यह त्रुटि तब होती है क्योंकि आप Qt के एक संस्करण पर संकलित एक प्रोजेक्ट का उपयोग कर रहे हैं। इसका मुख्य कारण यह है कि क्यूटी एमओसी उपकरण का उपयोग करता है जो सिग्नल स्लॉट हैंडलिंग और अन्य सामान के लिए गोंद कोड बनाता है।

Moc Q_OBJECT, संकेत :, स्लॉट :, आदि

इस कोड को पूरी तरह से क्यूटी संस्करण से जुड़ा हुआ है की तरह परिभाषाओं कि इस कोड बनाने के लिए इस्तेमाल किया गया था खोजने के लिए हेडर फाइल को पार्स करके करता है। कुछ मामलों में, यह कोड क्यूटी लाइब्रेरी के उसी संस्करण के लिए भी पूरी तरह से असंगत है जिसे विकल्पों के एक अलग सेट के साथ कॉन्फ़िगर किया गया था।

इस मामले में, यहां तक ​​कि .pro में कुछ परिवर्तन, जैसे के लिए सच है का उपयोग कर कॉन्फ़िग + = no_keywords का कारण बनता है MOC क्यूटी इस तरह बढ़ावा के रूप में अन्य पुस्तकालयों जो क्यूटी की तरह समान कीवर्ड का उपयोग संकेत स्लॉट तंत्र प्रदान के साथ काम करने के लिए अनुमति विभिन्न गोंद कोड उत्पन्न करने के लिए ।

तो, संक्षेप में, जब भी आप एक अलग क्यूटी पुस्तकालय के खिलाफ क्यूटी परियोजना संकलन करने की जरूरत है, तो आप निम्न कार्य सुनिश्चित करें: 1. रन: distclean 2. रन बनाने: qmake 3. रन:

बनाने

यह आपको हमेशा एक स्वच्छ निर्माण पेड़ देगा।

+0

सेमेक में साफ करने के बराबर क्या है? – Owen

+0

इसकी: साफ करें –

0

नए संस्करण (आपके मामले में यह 4.7.3) और संबंधित हेडर फ़ाइल का उपयोग करके आप एक नया मोक क्यों नहीं बनाते हैं।

moc ****.h -o ***.moc 
+0

त्रुटि संदेश में ऐसा लगता है कि यह वर्तमान एमओसी उपकरण के साथ बनाया गया है, लेकिन उपयोग किए गए शीर्षलेख बहुत पुराने हैं। – Bart

2

मेरे मामले में, ऐसा इसलिए था क्योंकि मैं "qmake-qt4" के बजाय "qmake" चला रहा था। "qmake" स्पष्ट रूप से Qt3 है। मुझे फेडोरा कोर 16 पर इसका सामना करना पड़ा।

यह क्रमशः "qmake-qt3" और "qmake" क्यों नहीं है, मेरे बाहर है।

+0

यह वास्तव में मुझे खराब कर देता है ... मुझे बहुत समय पहले qmake ditched होना चाहिए था ... – notlesh

संबंधित मुद्दे