2011-11-23 17 views
6

मैं इस तरह एक सरल क्यूटी आवेदन लिखने का प्रयास करता है:इस सरल क्यूटी आवेदन नहीं क्यों लिंक

main.cpp:

#include <QApplication> 

class MyApp : public QApplication { 
     Q_OBJECT 
public: 
     MyApp(int argc, char* argv[]); 
}; 

MyApp::MyApp(int argc, char* argv[]) : 
     QApplication(argc,argv) { 
} 

int main(int argc, char* argv[]) { 
    MyApp app(argc,argv); 
    return app.exec(); 
} 

लेकिन जब मैं संकलन और क्यूटी के साथ जोड़ने की कोशिश की प्रजापति 2.3.1 (क्यूटी 4.7.4) मैं 3 "अनसुलझे बाह्य प्रतीक" त्रुटियों मिलती है:

I think they are somehow related to the MetaObjectCompiler of Qt, but I can't figure out a solution. I know it's not considered good programming style in c++ to put declarations and definitions in one file, but that's not the point here. In my opinion it should be possible since there is nothing syntactically wrong here.

+0

'संकलित' को 'लिंक' में बदल दिया क्योंकि यह कोई कंपाइलर समस्या नहीं है। – stijn

उत्तर

12

नीचे दिए गए कोड का उपयोग करें, और बिल्डिंग से पहले qmake (बिल्ड> रन qmake) चलाने के लिए सुनिश्चित करें।

#include <QApplication> 

class MyApp : public QApplication { 
    Q_OBJECT 
public: 
    MyApp(int argc, char* argv[]); 
}; 

MyApp::MyApp(int argc, char* argv[]) : 
    QApplication(argc,argv) { 
} 

int main(int argc, char* argv[]) { 
    MyApp app(argc,argv); 
    return app.exec(); 
} 

#include "main.moc" 

स्पष्टीकरण: जब आप Q_OBJECT मैक्रो में शामिल हैं, इस सामग्री का एक समूह है कि मानक सी ++, इस तरह के संकेत और स्लॉट के रूप में नहीं है ऐसा करने के लिए क्यूटी संकेत देती है। यह moc चलाकर ऐसा करता है, जो बड़े हिस्से में कोड जनरेटर होता है। चल रहा है qmake मेटाडेटा बनाता है ताकि जब आपकी प्रोजेक्ट बनाई गई हो, तो यह जानता है कि moc, आदि

+1

यह ठीक काम किया। लेकिन मुझे अभी भी पता नहीं है कि यह .moc फ़ाइल को शामिल किए बिना क्यों काम करता है जब मैं घोषणा भाग को एक अलग शीर्षलेख फ़ाइल में डालता हूं। – Karsten

+2

आपको शायद ही कभी किसी भी '.moc' फ़ाइलों को स्पष्ट रूप से शामिल करने की आवश्यकता है। क्यूटी यह आपके लिए संभालती है। वास्तव में, * केवल * समय मैंने कभी इसका उपयोग किया है जब ऊपर दिए गए नमूने प्रोग्राम बनाते हैं जहां आपके पास केवल 'main.cpp' है। मुझे लगता है कि कारण यह है कि 'qmake' स्वचालित रूप से आपके लिए स्कैनिंग हेडर फाइलों को संभालता है, लेकिन सीपीपी फाइल नहीं, क्योंकि उनमें सामान्य रूप से ऐसी सामग्री नहीं होती है जिन्हें' moc'-ed 'की आवश्यकता होती है। http://doc.qt.nokia.com/latest/moc.html –

3

मैं तुम्हें फ़ाइल MOC करने की जरूरत है और नीचे जिसके परिणामस्वरूप main.moc शामिल लगता है।

0

मुझे लगता है कि यह QMake के साथ कुछ करने के लिए है। ऐसा नहीं है कि निष्पादन योग्य ऐप निर्यात किए गए डीएलएल वर्ग को नहीं देख सकता है। यह है कि वर्ग के लिए obj फ़ाइल मौजूद नहीं है। QT निर्माता बिल्ड मेनू से QMake चल रहा है और फिर इमारत काम करने लगती है।

Why does this Simple Qt Application not link

0

मैं सिर्फ एक ही समस्या मिले हैं, और यह एएनएसआई के लिए यूनिकोड से मेरी हेडर के चरित्र सेट बदलकर हल किया गया है।

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