2008-12-12 7 views
23

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

मैं gnome और xfce और केडीई समझता हूं और लिनक्स के लिए सभी डेस्कटॉप वातावरण हैं, और आधार स्थापित आमतौर पर एक्स (एक्सर्ग) है। लिनक्स के लिए कोडिंग करते समय, क्या आप एक्स के लिए या डेस्कटॉप वातावरण के लिए कोड करते हैं? क्या लिनक्स के लिए इस के लिए एक मानक लिनक्स हैडर (जैसे win32 windows.h है)? या यह हर डेस्कटॉप वातावरण के लिए अलग कोडिंग विधियां है?

किसी भी मदद की बहुत सराहना की है।

उत्तर

65

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

वाक्यांश "मूल प्रोग्रामिंग" वाक्यांश का उपयोग मुझे थोड़ा उलझन में डाल देता है। यदि आप देशी प्रोग्रामिंग सीखना चाहते हैं, तो यह उन एपीआई के लिए है जिन्हें आप कॉल करना चुनते हैं। इसी तर्क का उपयोग करते हुए, आपको सी में कोडिंग नहीं करना चाहिए, बजाय असेंबलर (या प्रत्यक्ष मशीन कोड) का चयन करना क्योंकि सी हार्डवेयर के लिए एक अमूर्तता प्रदान करता है।

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

आप परमाणुओं से बाहर घर नहीं बनाते हैं, आप इसे ईंटों से बाहर बनाते हैं। मेरा सुझाव उपकरण का उपयोग करना है, यही वह है जो वे वहां हैं।

+0

मुझे सीधे मोटीफ का उपयोग करना पड़ा है (केवल इसलिए कि हम जिस डब्ल्यूएम का उपयोग कर रहे हैं वह घर में विकसित है) और यह आसान नहीं है। मैं बजाय स्वतंत्र रूप से उपलब्ध यूआई अबास्ट्रक्शन परतों में से एक का उपयोग करूंगा – hhafez

+0

एक्सलिब में यूआई लिखना सादा Win32 में यूआई लिखना नहीं है, यह डायरेक्टड्रा में यूआई लिखने जैसा है; यह Win32 –

+6

की तुलना में बहुत कम स्तर है यदि आप आधा दर्जन अमूर्त परतों से गुजरने के इच्छुक नहीं हैं, तो लिनक्स विकास आपके लिए नहीं है। ;) – jalf

13

मुझे लगता है कि आप सीधे Xlib के खिलाफ सी कोड लिख सकते हैं, लेकिन आप जीटीके + या क्यूटी प्रदान करने वाली सभी कार्यक्षमताओं को दोबारा शुरू कर देंगे कि एक्स अकेले नहीं है।

+0

सहमत; मुझे लगता है कि यह लिनक्स दुनिया में चीजों को करने का एक अलग तरीका है। – Sydius

+0

मैं समझता हूं कि लिनक्स मूल रूप से केवल कंसोल था, और जीयूआई तीसरे पक्ष के कार्यक्रमों द्वारा जोड़ा जाता है। लेकिन लिनक्स में इन सभी टूलकिट्स का उपयोग करके यह अजीब लगता है, ऐसा लगता है कि एक जीयूआई प्राप्त करने के लिए आपको "हैक" का उपयोग करने की आवश्यकता है या बोलने के लिए झाड़ी के आसपास हराया जाता है। –

+2

@ माइक, क्या आप एनवीडिया के ड्राइवरों का उपयोग करते हुए डायरेक्टएक्स गेम खेलते समय "हैक्स" महसूस करते हैं? वे तीसरे पक्ष के सॉफ्टवेयर हैं। – paxdiablo

4

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

यदि आप मौजूदा टूलकिट का उपयोग नहीं करते हैं तो आपको चीजों को बहुत कम स्तर पर लिखना होगा - सीधे माउस और कीबोर्ड ईवेंट को संभालना। यदि आप एक बटन या टेक्स्टबॉक्स चाहते हैं तो आपको इसे निम्न स्तर xlib primitives का उपयोग करके स्वयं लिखना होगा।

यह कोशिश करने से पहले आप शायद अपने पसंदीदा डेस्कटॉप वातावरण की टूलकिट चुनने और उससे शुरू करने से बेहतर हो।

4

इस मामले में "मूल" जैसी कोई चीज़ नहीं है। विंडोज़ और ओएस एक्स के पास सिर्फ एक आधिकारिक विकल्प है, जबकि एक्स नहीं है।

+0

खैर, एक्स का आधिकारिक विकल्प है, यह केवल एक बहुत ही कम (बदसूरत) स्तर है। – paxdiablo

44

मैं क्यूटी, जीटीके, या WxWidgets या किसी भी उपकरण किट जैसे कुछ भी उपयोग नहीं करना चाहता। मैं मूल प्रोग्रामिंग सीखना चाहता हूं और इस तरह के उद्देश्य को हरा देता है।

नहीं, आप नहीं करते हैं। एक्स 11 के प्रारंभिक संस्करण में, जैसे आर 1 या आर 2, मैंने अकेले एक्सलिब में एक पूर्ण "हैलो, वर्ल्ड" प्रोग्राम को कोड किया।

सी

मोटे तौर पर 700 लाइनों तुम वहाँ जाने के लिए नहीं करना चाहती।

+8

इस टिप्पणी ने मुझे हंसी – matchew

+1

-1 बनाया। क्यू एंड ए साइट्स में पाया जाने वाला विशिष्ट बकवास - जब भी कोई "एबीसी कैसे करें?" पूछता है, तो कोई जवाब देता है "आप एबीसी क्यों करना चाहते हैं?"। जब तक आप Xlib का उपयोग करके कोड कैसे समझते हैं, आप कभी भी Xlib लिखने की स्थिति में नहीं होंगे - संभावित रूप से एक नए ओएस कर्नेल के लिए जिसका आविष्कार नहीं किया गया है। बेशक, यदि आप टाइमलाइन के तहत व्यावसायिक रूप से सॉफ्टवेयर वितरित कर रहे हैं, तो आप एक अच्छी तरह से समर्थित उच्च स्तरीय अमूर्तता के साथ जाएंगे। लेकिन यदि आप अंधेरे से आधुनिक दिन प्रोग्रामर पर भरोसा करते हैं, तो आप कभी भी सीखेंगे कि आवश्यकता होने पर प्राइमेटिव कैसे बनाएं। –

+0

विशिष्ट पैडेंटिक बकवास। वह इस पर स्पष्ट रूप से नया है। यदि वह आंतरिक सीखना चाहता है, तो वह कर सकता है, लेकिन फिर से, ऐसा करने के बाद * * एक्सलिब से बहुत अधिक नहीं था - केवल एक मूर्ख ही ऐसा करने की कोशिश करता है कि एक्स जीयूआई कैसे लिखना है। –

1

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

जैसा कि अन्य ने उल्लेख किया है कि शायद आप एक्स नहीं चाहते हैं कि यह दर्द हो।

3

लिनक्स & के लिए "मूल" इंटरफ़ेस अधिकांश अन्य यूनिक्स-जैसे ओएस X11 है, X11 के लिए निम्नतम स्तर सी API है।

जीटीके, क्यूटी & अन्य सभी (जहां तक ​​मुझे पता है) Xlib के संदर्भ में लागू किए गए हैं। जैसा कि अन्य ने कहा है, एक्सलिब आपको अधिकतम नियंत्रण देता है लेकिन आपको इसके लिए काम करना होगा (और अन्य उत्पाद वितरित करने के मामले में आपके आस-पास मंडल चला सकते हैं)।

संदर्भ के एक बिंदु के रूप में, मैंने व्यक्तिगत रूप से सी ++ में एक विशेष रूप से सुविधा युक्त & आधुनिक (यानी प्रवाह योग्य) क्रॉस-प्लेटफ़ॉर्म (Win32 + X11) GUI लाइब्रेरी लागू की। कुल गणना लगभग 2 9 केएलओसी सी ++ है, जिसमें से लगभग 2500 लाइनें X11 & Win32 shimming के लिए आवश्यक थीं। शेष मंच-तटस्थ विजेट कार्यान्वयन के लिए है। जब तक आप इस तरह की प्रतिबद्धता तैयार करने के लिए तैयार नहीं होते हैं, मैं दृढ़ता से उच्च स्तर की पुस्तकालयों में से एक के साथ जाने की सलाह देता हूं (क्यूटी शायद मेरी पसंद होगी, हालांकि मैं प्रीप्रोसेसर दृष्टिकोण नहीं खड़ा कर सकता हूं)।

बीटीडब्ल्यू, एक्सलिब के लिए एक बड़ा प्लस इसकी कच्ची पोर्टेबिलिटी है - स्क्रीन के साथ किसी भी यूनिक्स बॉक्स में यह होगा, और इसे विंडोज & ओएस एक्स पर भी काम करने के लिए बनाया जा सकता है।

10

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

आप कुछ टूलकिट का उपयोग बेहतर कर रहे हैं - आप हल्के वजन के लिए देख रहे हैं, क्यों की कोशिश नहीं FLTK?

2

मुझे लगता है कि यहां अन्य उत्तरों की सर्वसम्मति का सामना करना आवश्यक है। एक्स 11 वास्तव में निम्न स्तर है। लेकिन "वास्तव में" समझने के लिए कि क्या हो रहा है, आपको X11 कैसे काम करता है इसके बारे में कुछ परिचित होना चाहिए। चूंकि सभी टूलकिट एक्स के शीर्ष पर काम करते हैं, इसलिए आप इसे इस्तेमाल कर रहे हैं या नहीं। कहीं ऑनलाइन अच्छा ट्यूटोरियल है कि मैं खोजने के लिए बहुत आलसी हूँ। यह आपको एक साधारण हैलो वर्ल्ड बनाने के माध्यम से मार्गदर्शन करता है। ऐसा करने के लिए, आपको सीखना होगा कि विंडो कैसे बनाएं, ईवेंट का अनुरोध करें, विंडो को मैप करें, और लूप में ईवेंट को संसाधित करें। अमेज़ॅन पर कुछ उपयोग की जाने वाली किताबों को ऑर्डर करने के लिए आप अभी तक जा सकते हैं। ओ रेली खंड 1 और 2 (अब सबसे सस्ता संस्करण मिलता है, लेकिन X11R4 से पहले कुछ नहीं के लिए) संदर्भ के लिए आवश्यक हैं और कैसे टुकड़े एक साथ काम करने की पूरी कहानी पाने के लिए। सीखने के लिए, हालांकि, एरिक जॉनसन और केविन रीचर्ड द्वारा एक्स विंडो एप्लीकेशन प्रोग्रामिंग की सर्वश्रेष्ठ पुस्तक है।

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

संघर्ष, महत्वपूर्ण है।

0

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