2013-07-25 5 views
23

के बीच क्या अंतर है QT 5.0 एक नया QWindow कक्षा प्रदान करता है। हालांकि इस वर्ग पर प्रलेखन काफी व्यापक है, मैं यह देखने में असफल रहा हूं कि QWindowQWidget वर्ग से अलग है, और किस मामले में आप पूर्व को पसंद करेंगे। दोनों स्क्रीन पर सभी प्रकार की चीजों को देखने का एक आसान तरीका प्रदान करते हैं, दोनों ड्राइंग के लिए QPainter का उपयोग कर सकते हैं, और दोनों के पास ओपनजीएल के साथ बातचीत करने का एक तरीका है।QWindow और QWidget

API description में, यह कहना है कि:

एक आवेदन आम तौर पर इसकी यूआई के लिए QWidget या QQuickView उपयोग करेगा, और सीधे QWindow नहीं।

तो यह खिड़की के लिए एक लाभ प्रतीत नहीं होता है। इसके अलावा, यह बताता है:

विंडोज़ संभावित रूप से बहुत सारी मेमोरी का उपयोग कर सकते हैं। एक सामान्य माप चौड़ाई के समय ऊंचाई रंग गहराई है। एक विंडो में डबल और ट्रिपल बफरिंग के साथ-साथ गहराई और स्टैंसिल बफर का समर्थन करने के लिए कई बफर भी शामिल हो सकते हैं।

जो QWindow का उपयोग करने के पक्ष में प्रतीत नहीं होता है। तो आप किस मामले में इसका इस्तेमाल करेंगे?

उत्तर

51

QWindow को क्यूटी 5.0 में गुई/विगेट्स विभाजन के कारण पेश किया गया है। QWidget अब अपनी लाइब्रेरी में रहता है (QtWidgets); गैर-विजेट आधारित अनुप्रयोगों के लिए "अपूर्ण विंडो" का अवशोषण प्रदान करना आवश्यक था, और इस प्रकार QWindow बनाया गया था - और QtGui में रहता है।

गैर-विजेट आधारित अनुप्रयोगों की एक पूरी कक्षा है: QtQuick2 का उपयोग करने वाले सभी। वे QtWidget लाइब्रेरी का बिल्कुल उपयोग नहीं करते हैं, और वास्तव में, उनका उपयोग करते समय आप हमेशा QWindows का उपयोग कर रहे हैं (QQuickViewQWindow से विरासत)।

यहां तक ​​कि जब विगेट्स का उपयोग कर, उच्च-स्तरीय QWindows क्यूटी गिरी है, जो भी इसी उच्च-स्तरीय QWidgets के साथ सिंक में गुण और इस तरह के QWindow वस्तुओं के झंडे रहता द्वारा आपके लिए बनाई गई हैं। क्यूविंडो के बारे में जानने के बिना, इस तरह आप हमेशा जैसे विजेटों से निपट सकते हैं। मौजूदा अनुप्रयोगों के रूप में की उम्मीद, आदि आदि

एकमात्र कारण (अभी तक) मैं का उपयोग कर रहे QWindow पर स्पष्ट रूप रों एक बहुत विशिष्ट उपयोग के लिए है का प्रदर्शन जारी रहेगा: शुद्ध ओपन सामग्री आकर्षित करने के लिए। यह हासिल करना बहुत आसान है (विंडो पर ओपनजीएल सतह प्रकार सेट करके), और आपको अतिरिक्त निर्भरताओं (QtWidgets, QtOpenGL, आदि, जो लाइब्रेरी आकार के मामले में लागत है) लाने के लिए टालता है; यह कोडकी 10 लाइनों में ओपनजीएल ड्राइंग सतह बनाने की अनुमति देता है जो लिनक्स, विंडोज, मैक, क्यूएनएक्स, "एम्बेडेड लिनक्स" पर काम करेगा, और एंड्रॉइड और आईओएस की भी संभावना है। इस बिंदु से यह एक आदर्श एसडीएल प्रतिस्थापन के रूप में कार्य करता है। :)

+1

मुझे इस बारे में कुछ उदाहरण कहां मिल सकता है? – nkint

+1

यह एक उत्कृष्ट उत्तर है। यह सभी उत्तरों की मां की तरह है। कुडोस! –

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