2009-05-10 15 views
10

मैंने सुना है कि क्यूटी एपीआई बहुत पुरानी सी ++ भाषा में लिखी गई है। क्या यह सच है?
क्या इसे और अधिक आधुनिक सी ++ भाषा का उपयोग करने की कोई योजना है? क्या इस पर कोई आधिकारिक जानकारी है?क्यूटी में सी ++ भाषा का उपयोग कितना आधुनिक है?

क्या मौजूदा क्यूटी एपीआई संरचनाओं को अधिक आधुनिक सी ++ के साथ लपेटने के उद्देश्य से कोई परियोजनाएं हैं?

अद्यतन
कि टेम्पलेट्स से इस सवाल का अधिक है और यह सवाल केवल मामलों की वर्तमान स्थिति के बारे में (यही कारण है कि मैं इसे भविष्य टैग के साथ टैग है) नहीं है।

अद्यतन
मैं विशेष रूप से क्यूटी एपीआई से चिंतित हूं क्योंकि इस ढांचे के उपयोगकर्ता इस काम के साथ काम करते हैं।
एपीआई में आधुनिक सी ++ भाषा का उपयोग करके का उपयोग करने के लिए अधिक मजबूत, लचीला और आसान बनाता है।
क्यूटी के अंदर किस तरह का सी ++ उपयोग किया जाता है मेरे लिए बहुत कम महत्वपूर्ण है।

+2

अधिक आधुनिक क्या है? मुझे वास्तव में क्यूटी मिलती है, अच्छा है और मुझे कुछ भी याद नहीं है जो मुझे अधिक आधुनिक लगता है। –

+12

मैंने आज #qt आईआरसी चैनल में पूछा, और ट्रॉल्टेक के लिए काम करने वाले कुछ दोस्तों ने मुझे बताया कि वे कुछ सी ++ 1x सामान का उपयोग करने के बारे में सोचते हैं जब gcc4.5 बाहर आता है, जैसे विविध टेम्पलेट्स और सही अग्रेषण। तो यह बहस से काफी खून बह रहा है। यह सिर्फ ऐसा नहीं है "ओह अब चलो टेम्पलेट्स वूडू के साथ सबकुछ करते हैं ताकि हम सभी नौसिखियों को डरा सकें" जैसे कि मुझे लगता है कि कभी-कभी कुछ बूस्ट लाइब्रेरी डिज़ाइन की जाती हैं। –

+3

@hydroes तथ्य यह है कि अब कोई आधुनिक सी ++ जीयूआई ढांचा नहीं है इसका मतलब यह नहीं है कि क्यूटी आधुनिक है। हमेशा बहुत कम अच्छे सी ++ जीयूआई ढांचे रहे हैं इसलिए क्यूटी के पास कोई वास्तविक प्रतिस्पर्धा नहीं है। यह स्वचालित रूप से न तो अच्छा और न ही आधुनिक बनाता है :) –

उत्तर

27

क्यूटी टेम्पलेट्स का उपयोग न करने के लिए जाना जाता है, एक बहुत ही उपयोगी आधुनिक सी ++ सुविधा। लेकिन इसका मतलब यह नहीं है कि क्यूटी के एपीआई के लिए एक रैपर की आवश्यकता है। क्यूटी एक ही मुद्दे को हल करने के लिए इन-हाउस प्रीकंपलर का उपयोग करता है। कुछ इस दृष्टिकोण को पसंद नहीं करते हैं, लेकिन क्यूटी का एपीआई बहुत ही सरल और कुशल है, और मुझे विश्वास नहीं है कि इसे आधुनिक बनाने की वास्तविक आवश्यकता है। विशेष रूप से, संकेत & स्लॉट्स, क्यूटी से एक बहुत ही प्रभावशाली विशेषता टेम्पलेट का उपयोग करके हासिल की जा सकती हैं (boost.signals लाइब्रेरी देखें), लेकिन जिस तरह से क्यूटी ने इसे कार्यान्वित किया है, वह अभी भी अधिक कुशल है।

मैं कहूंगा "चिंता न करें और क्यूटी का उपयोग करें"।

संपादित करें: क्षमा करें मैं क्यूटी के साथ प्रदान किए गए टेम्पलेट कंटेनरों के बारे में भूल गया। लेकिन फिर भी, क्यूटी का एपीआई टेम्पलेट वर्गों का बहुत कम उपयोग करता है। इसका मतलब यह नहीं है कि वे क्यूटी के अंदर उनका उपयोग नहीं करते हैं या फिर कोडिंग का उनका तरीका अप्रचलित है।

बूस्ट। सिग्नल शायद क्यूटी संकेत/स्लॉट से अधिक शक्तिशाली हैं, लेकिन जहां तक ​​मैं कह सकता हूं, इस बारे में कोई बहस नहीं है कि इसका उपयोग करना आसान है। KISS principle का एक बहुत ही विश्वसनीय कार्यान्वयन।

+0

मैं इन पंक्तियों के साथ कुछ लिखने जा रहा था, लेकिन आप मुझे इसे हराया और महान कौशल के साथ भी :) मैं और अधिक सहमत नहीं हो सका। – shylent

+6

क्यूटी के सामान्य टेम्पलेट वाले कंटेनर को न भूलें http://doc.trolltech.com/4.5/containers.html :) –

+0

बिना टेम्पलेट के जीवन वास्तव में इतना बुरा नहीं है। कम से कम आपका कोड छोटा पढ़ने और संकलित करना आसान है। – Crashworks

2

मैं, क्यूटी को सी ++ में वूडू जादू जोड़ने के तरीके को पसंद नहीं करता हूं। यह इतने सारे मैक्रोज़ का उपयोग करता है कि यह मुझे सी के बारे में बहुत याद दिलाता है। इस समय, यह इंगित करने के लिए कुछ भी नहीं है कि क्यूटी भविष्य में सी ++ सुविधाओं के प्रति दयालु होगा। मैं वास्तव में इसे और अधिक सी की तरह ++ और अपने आप में एक भाषा नहीं हो देखना चाहेंगे (उदाहरण के लिए हम std :: वेक्टर <> और QVector <>? या क्यूटी संकेतों, Boost.Signals और sigc की क्या ज़रूरत है क्यों ++?)

+3

मैं यह इंगित करना चाहता हूं कि आपके द्वारा उल्लेख किए गए सिग्नल विधियों में से कोई भी वर्तमान में C++ या इसकी मानक लाइब्रेरी का हिस्सा नहीं है। वे सभी तृतीय पक्ष पुस्तकालय हैं। क्यूवीक्टर के लिए, यह एक क्यूटी शैली एपीआई के साथ एक वेक्टर कंटेनर है। क्यूटी का एपीआई अपने सबसे बड़े बिकने वाले बिंदुओं में से एक है, इसलिए एक परिचित एपीआई के साथ कंटेनर कक्षाएं प्रदान करना केवल उनके लिए समझ में आता है। –

+0

@ पार्कर एसटीएल और बूस्ट आजकल सी ++ के सबसे ज्यादा बिकने वाले बिंदुओं में से एक हैं। क्यूटी को उनके एपीआई को उनके साथ संगत होने के लिए डिज़ाइन नहीं करना चाहिए और अभी तक किसी अन्य का आविष्कार नहीं करना चाहिए? –

+2

@ पियोटर क्यूटी कंटेनर एसटीएल संगत हैं। क्यूटी सी ++ के लिए एक प्रमुख बिक्री बिंदु है, बूस्ट ने अपने सिग्नल/स्लॉट तंत्र का आविष्कार क्यों किया? ;) विविधता एक अच्छी बात है। क्यूटी सिग्नल और स्लॉट बूस्ट के साथ संगत होने के लिए, ध्यान रखें कि Qt * का आविष्कार * सिग्नल और स्लॉट 1 99 4 में वापस आया जब टेम्पलेट वास्तविक विकल्प नहीं थे। आजकल बूस्ट सिग्नल बेहतर कार्यान्वयन हो सकते हैं, लेकिन क्यूटी में मौजूदा सिस्टम का उपयोग करके बहुत सारे कोड लिखे गए बहुत सारे ग्राहक हैं। वे Qt5 के लिए टेम्पलेट संकेतों का उपयोग कर सकते हैं, लेकिन तब तक उनके हाथ बंधे हैं। http://doc.qtsoftware.com/4.5/templates.html –

1

क्यूटी एक पुस्तकालय है और संकलकों की एक विस्तृत श्रृंखला का समर्थन करने की आवश्यकता है। यह अभी भी एमएसवीसी 6 का समर्थन करता है, उदाहरण के लिए (मुझे लगता है कि क्यूटी सॉफ्टवेयर इस के लिए समर्थन समाप्त कर रहा है, हालांकि)। यह और अधिक आधुनिक सी ++ सुविधाएं सीमित क्यूटी का उपयोग करने में सक्षम है।

लेकिन इसका मतलब यह नहीं है कि आप उन्हें अपने क्यूटी कार्यक्रम में उपयोग नहीं कर सकते हैं।

+0

पुरानी कंपाइलर्स का समर्थन करने से इसका समर्थन करने वाले कंपाइलरों पर आधुनिक सी ++ का उपयोग करने से नहीं रोका जाता है। जो कुछ आवश्यक है वह इस बारे में जानकारी है कि निर्माण के किन प्लेटफॉर्म पर समर्थित है। इस तरह के ढांचे का उपयोग करने से सी ++ फ्रेमवर्क में मौजूदा सी ++ का उपयोग नहीं करना। और भी अधिक संभावना है कि कोई भी समान कार्यक्षमता वाले किसी व्यक्ति के साथ आएगा लेकिन आधुनिक सी ++ में लिखा गया है और इस प्रकार उपयोग करने के लिए बहुत साफ और आसान है। –

+1

किसी भी सी ++ ढांचे के सबसे मूल्यवान पहलू में से एक यह है कि मानक पुस्तकालय के साथ इसका कितना अच्छा उपयोग किया जा सकता है। नए कंटेनरों को खोजना किसी भी सी ++ ढांचे को नहीं जाना चाहिए। –

12

क्यूटी स्रोतों "< टेम्पलेट" src/corelib में 1280 बार अकेले पैटर्न होते हैं। मैं यह कैसे गलत हो सकता है, क्योंकि

+0

आप सही हैं। वे अपने सिग्नल/स्लॉट इवेंट सिस्टम के लिए टेम्पलेट्स का उपयोग नहीं करते हैं, लेकिन वे टेम्पलेट्स का उपयोग बहुत करते हैं ... – JimDaniel

+1

+1 मुझे भी स्पष्टीकरण की आवश्यकता हो सकती है। – soulmerge

4

मैं वास्तव में जिस तरह से क्यूटी इसके संकेत/स्लॉट तंत्र को लागू करने में कामयाब रहे पसंद नहीं है "क्यूटी टेम्पलेट का उपयोग करने के लिए नहीं जाना जाता है" असफल। उनकी 'MOC' precompiler वास्तव में मेरे लिए एक हैक की तरह बदबू आ रही है, और यह भी मानक सी का समर्थन नहीं करता ++।

मुझे लगता है कि यह बहुत अच्छा होगा अगर क्यूटी कम से कम एसटीएल कक्षाओं का उपयोग करने के लिए खुद को आधुनिकीकृत कर सके। जब भी संभव हो बूस्ट का उपयोग करने के लिए क्यूटी के लिए वास्तव में कमाल होगा (विशेष रूप से बूस्ट। सिग्नल)।

+0

मुझे जल्द ही एसटीएल का उपयोग कर क्यूटी नहीं दिखाई देता है। अब नोकिया ट्रॉल्टेक का मालिक है, यह ड्राइव नोकिया मोबाइल प्लेटफार्मों की ओर है और सिम्बियन सी ++ मानक के साथ बिल्कुल अनुकूल नहीं है। – TrayMan

+0

@OP पूरी तरह से सहमत हैं। –

+0

@TrayMan बहुत दुखी ... :( –

17

क्यूटी सी ++ भाषा के आधुनिक रूपों का उपयोग करता है - वर्तमान में सी ++ 98, और हाँ टेम्पलेट्स का भी उपयोग किया जाता है जहां यह एप्रोप्रिटेट होता है। क्यूटी के पास एसटीएल के लिए कुछ समर्थन है। उदाहरण देखें http://qt-project.org/doc/qt-5.1/qtcore/containers.html - और उदाहरण के लिए सुविधा फ़ंक्शन std :: स्ट्रिंग। यह सभी दस्तावेज़ों में है: http://qt-project.org/doc/qt-5.1/qtdoc/index.html;) टेम्पलेट बनाम एमओसी के बारे में सवाल वह है जिसे हम अक्सर प्राप्त करते हैं, हमने इसे हमारे दस्तावेज़ में जोड़ा है; http://qt-project.org/doc/qt-4.8/templates.html

+0

@Henrik आपकी टिप्पणी के लिए धन्यवाद है। मुझे लगता है कि लेख में टेम्पलेट्स के खिलाफ अधिकांश तर्क बाहर बहुत कमजोर हैं। क्या आप हमें दिखाए गए लेखों की आलोचनात्मक लेखों के बारे में बता सकते हैं? –

+1

@ हेनरिक वैसे; एसओ डेवलपर्स के बीच बहुत लोकप्रिय हो रहा है। क्या आपको लगता है कि क्यूटी टीम के किसी व्यक्ति ने क्यूटी प्रश्नों की निगरानी और जवाब दे सकते हैं? –

+0

@ Piotr Googling द्वारा आपको मिले कई विभिन्न स्रोत हैं, लेकिन यह एक लगातार शिकायत है जिसे हमने उस लेख में दस्तावेज करने के लिए चुना है :) –

9

बूस्ट सिग्नल के विपरीत, क्यूटी का सिग्नल/स्लॉट का कार्यान्वयन कतारबद्ध कनेक्शन के उपयोग के माध्यम से थ्रेड-सुरक्षित है। 2 मई, 200 9 को, बूस्ट। सिग्नल 2 जारी किया गया था और इसके साथ-साथ वांछित थ्रेड-सुरक्षा लाया गया था। डेवलपर दृष्टिकोण से, क्यूटी के सिग्नल/स्लॉट के कार्यान्वयन का उपयोग करना बहुत आसान है, ज्यादातर इस तथ्य के कारण कि यह टेम्पलेट का उपयोग नहीं करता है। सिग्नल और स्लॉट्स के लिए टेम्पलेट्स के बजाय क्यूटी ने moc का उपयोग क्यों किया है, इसकी गहराई से पढ़ने के लिए, here's a page उनके दस्तावेज़ों से।

उन लोगों के लिए जो सोचते हैं कि क्यूटी के कंटेनर वर्गों का अपना सेट क्यों है, मुझे पूरा यकीन है कि मुख्य प्रेरणा निहित साझा करने की पेशकश थी। सभी कंटेनर वर्गों को पूरी तरह से साझा किया जाता है, इसलिए जब भी एक क्यूलिस्ट की प्रतिलिपि बनाई जाती है, तो डेटा के लिए केवल एक सूचक की प्रतिलिपि बनाई जाती है। क्यूटी के भीतर उथले प्रतिलिपि पर अधिक जानकारी के लिए here देखें।

+0

@ कृष्ण http://www.gotw.ca/publications/optimizations देखें।एचटीएम जहां हर्ब सटर दिखाता है कि उर्फ ​​गाय (कॉपी-ऑन-राइट) की प्रतिलिपि बनाने वाली उर्फ ​​उथली क्यों एक बहुप्रचारित वातावरण में खराब है। –

+0

@Piotr दिलचस्प पढ़ना और अच्छा बिंदु। ट्रॉल्टेक के अनुसार (http://doc.trolltech.com/4.5/threads.html#threads-and-implicit-sharing), क्यूटी 4 की निहित रूप से साझा कक्षाएं फिर से प्रवेश कर रही हैं, जिसका अर्थ है कि एक वर्ग के सदस्य कार्यों को एक साथ कहा जा सकता है विभिन्न धागे, जब तक कि उनमें से प्रत्येक धागे का वर्ग का अपना उदाहरण होता है। – Krsna

6

सीधे अपने प्रश्न का उत्तर देने के लिए, क्यूटी का एपीआई व्यापक है। मुझे पूरा यकीन है कि वे कुछ समय के साथ QApp :: ParkMyCar() फ़ंक्शन के साथ बाहर आ जाएंगे। वे कभी-कभी दक्षता बनाम उपयोग की आसानी पर विभिन्न स्थितियों के साथ, एक ही चीज़ करने के कई तरीकों को लागू करते हैं। उनके (उत्कृष्ट) दस्तावेज देखें। यह व्यापक है, और मेरे गधे को एक से अधिक बार बचा लिया है।

जो मैंने क्यूटी स्रोत कोड के बारे में देखा है, कोड बहुत ही कुशल है।
इंस्टॉल कॉन्फ़िगरेशन में सुविधाओं पर एक नज़र डालें - आप विभिन्न सुविधाओं (एसटीएल, थ्रेडिंग और यहां तक ​​कि जीयूआई सहित) के लिए समर्थन चालू/बंद कर सकते हैं। इसके अलावा, जब ट्रॉल्स ने क्यूटी 4 ग्राउंड-अप बनाया, तो उन्होंने कोड-जैज़ के खिलाफ विशेषताओं का व्यापार नहीं किया- उन्होंने दोनों को और अधिक प्रदान किया। अपने प्रोग्रामर की गुणवत्ता और प्रमुख संस्करणों को अपडेट करने के उनके तरीके को देखते हुए, मुझे नहीं लगता कि हमें पुराने होने वाले क्यूटी (या भागों) के बारे में चिंता करने की ज़रूरत है।

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

+2

मैं नहीं पूछ रहा था कि क्यूटी की एपीआई कितनी व्यापक है। मैं नहीं पूछ रहा था कि उनका कोड कितना कुशल है। वर्ष 200 9 में समर्थित डॉस आधारित विंडोज 98 पागल है और उपयोगकर्ताओं के बहुमत के लिए बहुत नुकसान पहुंचाता है ... आप प्राचीन सिस्टम का समर्थन करके .NET के साथ प्रतिस्पर्धा नहीं करते हैं ... –

+2

अच्छा, वास्तव में आप करते हैं। यदि आपको 400 पाउंड गोरिल्ला के साथ प्रतिस्पर्धा करना है, तो आप स्क्रैप्स के रहते हैं, आप उसका सामना नहीं करते हैं। –

4

क्यूटी 4.x जीवनकाल के दौरान, मुझे संदेह है कि क्यूटी के कुछ हिस्सों को फिर से लिखने के लिए यह समझ में आता है। "अधिक आधुनिक" सी ++। यह इस आधार पर है कि क्यूटी के एक ही बड़े संस्करण में सभी रिलीज अभी भी binary compatible होना चाहिए। हम ग्राहकों को अभी भी अप्रचलित या बहिष्कृत नहीं कर सकते हैं, जो ग्राहक अभी भी उपयोग करते हैं (हालांकि यह समर्थित सामग्री के सीमित सेट के लिए भी नई सामग्री पेश करने के लिए बिल्कुल ठीक है)।

यदि अंत में क्यूटी 5 लगभग दरवाजे से बाहर है, और आधुनिक सी ++ संरचनाएं और सुविधाएं अंततः लक्षित समर्थित प्लेटफॉर्म और कंपाइलर्स में उपलब्ध हैं, और ऐसा करने से सी ++ डेवलपर्स और ग्राहकों को बेहतर और अधिक शक्तिशाली कोड लिखने में मदद मिलेगी, तो क्यों नहीं?

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