2011-08-13 34 views
8

का पृथक्करण मैं क्यूटी में एक जीयूआई आवेदन विकसित कर रहा हूं।तर्क और यूआई

यह मेरा पहला जीयूआई एप्लीकेशन है और मैं बहुत अनुभवी नहीं हूं और अभी भी सी ++ और क्यूटी फ्रेमवर्क के कुछ और उन्नत पहलुओं के साथ कुश्ती करना है।

एप्लिकेशन एक बहुत ही सरल है, जिसमें एक मुख्य विंडो और कुछ संवाद हैं जहां उपयोगकर्ता सेटिंग्स को कॉन्फ़िगर करता है और एक बटन दबाता है, और प्रोग्राम यूआई पर कहीं नतीजे देता है, जो एक (काफी जटिल) गणना करता है।

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

मुझे लगता है कि यह शायद एक बहुत ही बुनियादी सी ++ प्रश्न है (क्यूटी भी प्रासंगिक नहीं है), लेकिन हे सभी प्रोग्रामिंग विज़ार्ड नहीं हैं। किसी भी संकेत या मदद के लिए धन्यवाद!

उत्तर

12

वहाँ अपने प्रश्न मान्य है तो ऐसा करने के कई तरीके हैं।

  1. आपकी जीयूआई कक्षा आपके लॉजिक क्लास से ली जा सकती है। सामान्य दृष्टिकोण नहीं है लेकिन यह इस बात पर निर्भर करता है कि आपका एप्लिकेशन कैसे डिज़ाइन किया गया है। एक बड़ी कमी यह है कि जीयूआई को तर्क के समान धागे में रहना होगा। अक्सर आप वर्गों को कई धागे में चलाना चाहते हैं जैसे कि भारी गणना जीयूआई को स्थिर नहीं करती है।

  2. आपका जीयूआई वर्ग अपने तर्क वर्ग और/या उपाध्यक्ष प्रतिकूल करने के लिए एक सूचक पकड़ कर सकते हैं। यह सुविधा के लिए एक संदर्भ भी हो सकता है यदि आपकी तर्क कक्षा जीयूआई कक्षा से पहले मौजूद है और यह जीवित है। फिर आप जीयूआई कक्षा के निर्माता के संदर्भ को पारित कर सकते हैं और आपको यह जांचना नहीं होगा कि कोई सूचक मान्य है या नहीं।

  3. आपकी जीयूआई कक्षा गेटर्स/सेटर्स या सीधे के माध्यम से डेटा सदस्यों तक पहुंच सकती है, अगर आप उन्हें सार्वजनिक बनाना चाहते हैं या friend कक्षा के रूप में लॉजिक क्लास में बस अपनी जीयूआई कक्षा को परिभाषित करना चाहते हैं। यहां तक ​​कि यदि आप गेटर्स का उपयोग करते हैं, तो वे कॉन्स संदर्भ वापस कर सकते हैं, इसलिए कोई प्रति शामिल नहीं है। QStringList जैसे क्यूटी वर्गों में भी अपनी संदर्भ गणना, कॉपी-ऑन-राइट तंत्र है जो प्रतियों से बचाता है।

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

आमतौर पर आप 2 और 3 के मिश्रण का उपयोग करेंगे: उपयोगकर्ता को प्रस्तुत तर्क वर्ग से डेटा पढ़ने के लिए गेटर्स का उपयोग करें। कार्रवाई भड़काने या डेटा हेरफेर करने के लिए सिग्नल का उपयोग करें (उपयोगकर्ता एक विकल्प बनाता है, तर्क वर्ग प्रतिक्रिया करने के लिए है)।(- दृश्य - नियंत्रण मॉडल)

साधारण मामलों के लिए, बस मॉडल -

+0

आपका व्यापक उत्तर बहुत उपयोगी था! अब मुझे इस अलगाव की बेहतर समझ है। धन्यवाद! – vedran

+0

धन्यवाद! क्या इनमें से कोई भी "सर्वश्रेष्ठ" है? –

+0

आम तौर पर मैं क्यूटी सिग्नल/स्लॉट सिस्टम का उपयोग करने का सुझाव दूंगा। हालांकि कारण यह है कि मैं जीयूआई के लिए क्यूटी का उपयोग करता हूं। – ypnos

1

शायद मुझे यहां कुछ याद आ रहा है लेकिन बस एक सेटर के माध्यम से यूआई कक्षा में अपनी डेटा कक्षा इंजेक्ट करें और डेटा क्लास विधि को जनता के रूप में बेनकाब करें। किसी भी मुकाबला ओवरहेड से बचने के लिए आपको केवल अपनी डेटा क्लास के पॉइंटर को पास करने की आवश्यकता है।

4

एक प्रोग्रामिंग मॉडल MVC कहा जाता है दृश्य पर्याप्त है। मॉडल डेटा का प्रतिनिधित्व करता है, और दृश्य यूआई का प्रतिनिधित्व करता है।

मॉडल वर्ग कुछ इंटरफेस सेट/डेटा प्राप्त उजागर करता है। मॉडल क्लास को आमतौर पर व्यू क्लास के बारे में कोई जानकारी नहीं है, लेकिन जब डेटा बदलता है तो यह आमतौर पर व्यू क्लास को सूचित कर सकता है (यह क्यूटी में सिग्नल/स्लॉट का उपयोग करके किया जा सकता है)।

देखें वर्ग मॉडल वर्ग के लिए एक सूचक धारण, और प्रयोग इंटरफेस मॉडल वर्ग डेटा हेरफेर करने के लिए प्रदान करता है।

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

  • कोई संबंधित समस्या नहीं^_^