2014-09-11 8 views
9

मेरे पास सिर्फ एक प्रश्न है: यदि आप कुछ कोड संकलित कर रहे हैं तो यह परिभाषित करने के लिए एक परिभाषित (या कुछ समान) उपलब्ध है यदि GUI ध्वज सेट किया गया है या नहीं?क्यूटी गुई के लिए एक परिभाषा उपलब्ध है?

मैं बेहतर समझाऊंगा। मेरे पास कुछ कोड है जिसे मैं क्यूटी में विभिन्न कार्यक्रमों के लिए पुन: उपयोग करना चाहता हूं। अब, इस कोड के कुछ हिस्सों का उपयोग केवल जीयूआई अनुप्रयोगों (या बेहतर विजेट अनुप्रयोगों) में किया जाता है और QtGui और QtWidgets पर निर्भर करता है। मैं इन भागों को एक सशर्त ब्लॉक (#if या #ifdef) में रखना चाहता हूं ताकि उन्हें केवल उन परियोजनाओं में संकलित किया जा सके जहां जीयूआई और/या विजेट पुस्तकालय शामिल हैं।

और, इससे पहले कि आप इसका सुझाव दें, लाइब्रेरी बनाना समाधान नहीं है। मैं एक परिभाषित करना पसंद करूंगा ...

संपादित करें:
शायद मैंने स्वयं को स्पष्ट रूप से समझाया नहीं है। जो मैं खोज रहा हूं वह जीयूआई समावेशन से जुड़ी परिभाषा है। उदाहरण:

फ़ाइल myfile.h

#ifdef THE_QT_GUI_DEFINE_FLAG 
#include <QPainter.h> 
#endif 

परियोजना एक: qmake फ़ाइल में मैं लिखने:

QT  += core gui 
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

परियोजना बी: qmake फ़ाइल में मैं लिखने:

QT  -= gui 

अब, मैं प्रोजेक्ट ए में शामिल होने के लिए QPainter.h चाहता हूं। क्या आप जानते हैं कि जब मैं जी जोड़ता हूं तो परिभाषित फ्लैग सेट क्या होता है ui पुस्तकालय? मैंने QT_QTGUI_MODULE_H के साथ प्रयास किया, लेकिन यह काम नहीं करता है (संभवतः क्योंकि यह क्यूटी लाइब्रेरी संकलित करते समय उपयोग किया जाता है)।

+0

अब यह प्रीप्रोसेसर प्रतीकों को परिभाषित करने के बारे में एक प्रश्नोत्तरी प्रश्न प्रतीत होता है। क्या हमें qmake टैग जोड़ना चाहिए? – drescherjm

+0

एहम ... नहीं, यह QMake को प्रीप्रोसेसर प्रतीक को परिभाषित करने के बारे में बताने का सवाल नहीं है। यह एक "प्रीप्रोसेसर प्रतीक परिभाषित किया गया है, जब क्यूमेक के माध्यम से, मैं गुई सुविधा जोड़ता हूं?" प्रश्न – frarugi87

उत्तर

10

ठीक है, मैंने इसे पाया। जवाब मैं स्वचालित रूप से उत्पन्न फ़ाइलों में खुदाई करने के लिए और, lib फ़ाइलों के माध्यम से खोज के लिए चला गया से प्रेरित होकर, मैंने पाया

Qt\5.2.1\msvc2010\mkspecs\modules\qt_lib_gui.pri 

जो लाइन है

QT.gui.DEFINES = QT_GUI_LIB 

और फिर ... यह जादू है शब्द! :)

अब अगर मैं

#ifdef QT_GUI_LIB 
#include <QPainter.h> 
#endif 

QPainter सिर्फ जीयूआई-सक्षम परियोजनाओं में शामिल किया गया है डाल दिया।

आपकी मदद के लिए सभी को धन्यवाद!

+0

यह जानना हमेशा अच्छा लगा। – Niall

+4

और यदि आपको केवल मूल lib की आवश्यकता है तो यह 'QT_CORE_LIB' है – Zaiborg

0

जब क्यूटी में कुछ के बारे में संदेह में, यह याद रखना:

क्यूटी "सी की तरह ++" नहीं है। यह सी ++ है। यदि यह सी ++ में कानूनी है, तो यह क्यूटी में कानूनी है। कुछ विशेष नियम QObject (उदाहरण के लिए एकाधिक विरासत) के साथ आते हैं, लेकिन यदि यह सी ++ पक्ष से कुछ है, तो यह लगभग हमेशा काम करने जा रहा है।

+0

मैं असहमत हूं। क्यूटी सी ++ की तरह नहीं है, यह सी ++ (टेम्पलेट्स की तरह) के सभी नियमों का पालन नहीं करता है और अपने स्वयं के (एमओसी, सिग्नल और स्लॉट) के नियम जोड़ता है। इसके अलावा क्यूटी में स्वामित्व मॉडल सी ++ में किसी और चीज के विपरीत नहीं है। उन्होंने अपनी खुद की टाइप-ट्राइट सिस्टम भी जोड़ा।यदि आप अपनी सैनिटी को स्वीकार करना चाहते हैं तो क्यूटी सी ++ की बोली है। यह जानना कि सी ++ चीजें कैसे अच्छी शुरुआत होती है, लेकिन कभी-कभी क्यूटी को समझने के लिए पर्याप्त नहीं होता है। – nwp

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