मैं C ++ में ग्राफ़िकल यूज़र इंटरफ़ेस कैसे बनाऊँ? [बन्द है]


270

मेरे सभी C ++ प्रोग्राम अब तक कमांड लाइन इंटरफेस का उपयोग कर रहे हैं और मेरे पास केवल दूसरी भाषा है जिसका अनुभव PHP है जो GUIs का समर्थन नहीं करता है।

मैं C ++ में ग्राफ़िकल यूज़र इंटरफ़ेस प्रोग्रामिंग के साथ कहाँ से शुरू करूँ? मैं एक कैसे बनाऊँ?


4
निर्भर करता है। आप किस प्रकार के ऑपरेटिंग सिस्टम को लक्षित कर रहे हैं? कई GUI फ्रेमवर्क OS-specific हैं।
माइकल रतनपिन्थ

3
क्या ओएस / मंच? या, यदि आप क्रॉस-प्लेटफ़ॉर्म GUI एप्लिकेशन लिखने में रुचि रखते हैं, तो कृपया कहें - ये चीजें C ++ के लिए बहुत बड़ा अंतर बनाती हैं ...
Shog9

3
PHP GUI प्रोग्राम लिखने का समर्थन करता है। कोई कारण नहीं है कि आप कमांड लाइन से PHP प्रोग्राम नहीं चला सकते हैं, और PHP-GTK gtk.php.net और PHP-Qt php-qt.org जैसी gui पुस्तकालयों हैं जो आपकी मदद करने के लिए मूल्यांकन कर सकते हैं कि आपको इसकी आवश्यकता क्यों है? c ++। C ++ में GUI लिखना कई अन्य भाषाओं की तुलना में कठिन है, और आप अपने c ++ कोड को Python या C # या PHP से कॉल करने योग्य लाइब्रेरी में बंडल करने में सक्षम हो सकते हैं या GUIs को कोड करने के लिए कुछ आसान हो सकता है।
किबिबू

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

6
"C ++ में GUI लिखना कई अन्य भाषाओं की तुलना में कठिन है" आप इस दावे को क्या आधार दे रहे हैं?
प्यूट्र जूल 27'09

जवाबों:


163

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

प्रत्येक ऑपरेटिंग सिस्टम अपने स्वयं के जीयूआई टूलकिट, हेडर फ़ाइलों के सुइट और एपीआई कॉल और चीजों को करने के अपने तरीके के साथ आता है। GTK , Qt और wxWidgets जैसे क्रॉस प्लेटफ़ॉर्म टूलकिट भी हैं जो आपको कहीं भी काम करने वाले प्रोग्राम बनाने में मदद करते हैं। वे प्रत्येक प्लेटफ़ॉर्म पर एक ही एपीआई कॉल करके इसे प्राप्त करते हैं, लेकिन उन एपीआई फ़ंक्शंस के लिए एक अलग कार्यान्वयन जो मूल ओएस एपीआई कॉल को कॉल करता है।

एक चीज जो वे सभी में समाहित है, वह सीएलआई कार्यक्रम से अलग होगी, जिसे एक इवेंट लूप कहा जाता है। मूल विचार कुछ जटिल है, और संपीड़ित करना मुश्किल है, लेकिन संक्षेप में इसका मतलब है कि आपके मुख्य वर्ग / मुख्य कार्य में बहुत से लोगों का नरक नहीं जा रहा है, सिवाय:

  • यदि कोई नई घटना है, तो इवेंट कतार की जाँच करें
  • यदि है, तो उन घटनाओं को उपयुक्त संचालकों को भेज दें
  • जब आपका काम हो जाए, तो ऑपरेटिंग सिस्टम पर वापस कंट्रोल करें (आमतौर पर किसी प्रकार की विशेष "नींद" या "चयन" या "उपज" फ़ंक्शन के साथ)
  • तब ऑपरेटिंग सिस्टम होने पर यील्ड फंक्शन वापस आ जाएगा, और आपके पास एक और लूप होगा।

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

आपको यह ध्यान रखना चाहिए कि जीयूआई प्रोग्रामिंग सामान्य रूप से अविश्वसनीय रूप से जटिल और कठिन है। यदि आपके पास विकल्प है, तो वास्तव में एक एम्बेडेड वेबसर्वर को अपने प्रोग्राम में एकीकृत करना और HTML / वेब आधारित इंटरफ़ेस रखना बहुत आसान है। एक अपवाद जो मैंने देखा है वह Apple का कोको + Xcode + इंटरफ़ेस बिल्डर + ट्यूटोरियल है जो इसे आसानी से GUI प्रोग्रामिंग के लिए नए लोगों के लिए सबसे अधिक स्वीकार्य वातावरण बनाता है जो मैंने देखा है।


" यह वास्तव में बहुत आसान है बस एक एम्बेडेड वेबसर्वर को अपने कार्यक्रम में एकीकृत करें और एक html / वेब आधारित इंटरफ़ेस है। " यह निर्भर करता है। यदि आप फैंसी सामान (जटिल यूआई, कस्टम नियंत्रण, एनिमेशन, आदि) करना चाहते हैं, तो हाँ। यदि आप बस एक सामान्य जीयूआई (सामान्य नियंत्रण और एक देशी भावना के साथ) चाहते हैं, तो नहीं।
एकॉर्न

167

बहुत सारे मुफ्त पोर्टेबल GUI पुस्तकालय हैं , जिनमें से प्रत्येक की अपनी ताकत और कमजोरियां हैं:

विशेष रूप से क्यूटी में अच्छे ट्यूटोरियल और टूल हैं जो आपको आरंभ करने में मदद करते हैं। का आनंद लें!

हालाँकि, ध्यान दें, कि आपको Win32 API या MFC जैसे प्लेटफ़ॉर्म विशिष्ट कार्यक्षमता से बचना चाहिए । यह लगभग किसी भी लाभ के साथ एक विशिष्ट मंच पर आपको अनावश्यक रूप से बाँधता है।


25
व्यक्तिगत रूप से, मुझे लगता है कि Win32 एपीआई के लिए प्रोग्रामिंग सुंदर है। मुझे Qt का उपयोग करने की तुलना में यह बहुत अधिक पसंद है, और यह कि अपने आप में एक लाभ है। हो सकता है कि यह सिर्फ मुझे है, यद्यपि।
मर्दुक्लाव

6
मेरा व्यक्तिगत अनुभव इसके ठीक विपरीत है। Win32 API ने मेरे लिए किसी भी अन्य API की तुलना में अधिक परेशानी का कारण बना।
वोग

17
@ मर्ड्यूक्लाव, "मुझे लगता है कि Win32 एपीआई के लिए प्रोग्रामिंग सुंदर है।" मैं पोर्टेबल कोड लिखने के लिए हर कीमत पर कोशिश करता हूं। (कृपया ध्यान दें कि मैंने "कोशिश" शब्द का इस्तेमाल किया क्योंकि अपवाद हैं ...) "पोर्टेबल" को गैर-पोर्टेबल कोड कैसे लिखा जा रहा है?
ट्रेवर बॉयड स्मिथ

11
@ ट्रेवर बॉयड स्मिथ: विभिन्न लक्ष्यों, मुझे लगता है। लगभग कोई भी कोड जो मैंने कभी पेशेवर रूप से लिखा है, संभवतः क्रॉस-प्लेटफ़ॉर्म हो सकता है, इसलिए यह मेरे लिए कभी भी चिंता का विषय नहीं है।
मृदुक्लाव

1
मिलियन डॉलर का सवाल यह है कि जो लोग गेम ट्रेनर बनाते हैं वे सिर्फ छोटे एक्स की आपूर्ति करते हैं और उनके कार्यक्रमों में सुंदर यूआई है इसलिए मुझे आश्चर्य है कि वे यूआई का निर्माण कैसे करते हैं वे इसके साथ इन 3 पार्टी के कामों की आपूर्ति नहीं करते हैं?
user889030

74

ओएस स्वतंत्र एल्गोरिथ्म " तीन चरणों में सी ++ में जीयूआई अनुप्रयोग बनाना ":

  1. क्यूटी निर्माता स्थापित करें

    यहां छवि विवरण दर्ज करें

  2. नया प्रोजेक्ट बनाएं (Qt विजेट एप्लिकेशन)

    यहां छवि विवरण दर्ज करें

  3. इसे बनाओ।

बधाई हो, आपको C ++ में अपना पहला GUI मिल गया है।

अब आप "हैलो वर्ल्ड" GUI एप्लिकेशन की तुलना में कुछ अधिक जटिल बनाने के लिए बहुत सारे दस्तावेज पढ़ने के लिए तैयार हैं ।


अतीत में, मुझे अन्य GUI के साथ शुरुआत से अनुकूल नहीं होने से परेशानी हुई। लेकिन, Qt में कुछ बेहतरीन ट्यूटोरियल हैं। सिफ़ारिश के लिए शुक्रिया!
जेडी

23

"एक उदाहरण के रूप में विंडोज़ एक्सपी कहो" की टिप्पणी को देखते हुए, फिर आपके विकल्प हैं:

  • ऑपरेटिंग सिस्टम के साथ सीधे अपने एपीआई के माध्यम से बातचीत करें, जो माइक्रोसॉफ्ट विंडोज के लिए आश्चर्यचकित आश्चर्य कॉल विंडोज एपीआई है । WinAPI का निश्चित संदर्भ Microsoft की MSDN वेबसाइट है । उस के लिए एक लोकप्रिय ऑनलाइन शुरुआत ट्यूटोरियल हैफर्गर Win32 एपीआई प्रोग्रामिंग ट्यूटोरियल । उस के लिए क्लासिक किताब चार्ल्स पेट्ज़ोल्ड के प्रोग्रामिंग विंडोज, 5 वें संस्करण है

  • MFC जैसे विशिष्ट लाइब्रेरी (OS और कंपाइलर दोनों के संदर्भ में) प्लेटफ़ॉर्म का उपयोग करें , जो WinAPI को C ++ वर्ग में लपेटता है। उसके लिए संदर्भ फिर से MSDN है। इसके लिए एक क्लासिक किताब है जेफ़ प्रोसेज़ प्रोग्रामिंग एमएफसी, 2 डी संस्करण । यदि आप CodeGear C ++ बिल्डर का उपयोग कर रहे हैं, तो यहाँ विकल्प VCL है

  • GTK + (C ++ आवरण: gtkmm ), Qt , wxWidgets , या FLTK जैसे क्रॉस प्लेटफॉर्म लाइब्रेरी का उपयोग करेंउस विशिष्ट OS के API को लपेटें। इनसे लाभ यह है कि सामान्य तौर पर, आपके प्रोग्राम को स्रोत कोड बदलने के बिना अलग-अलग ओएस के लिए संकलित किया जा सकता है। जैसा कि पहले ही उल्लेख किया गया है, वे प्रत्येक की अपनी ताकत और कमजोरियां हैं। एक विचार जब चयन करने के लिए जो एक का उपयोग करने के लिए अपने लाइसेंस है। दिए गए उदाहरणों के लिए, GTK + & gtkmm LGPL के तहत लाइसेंस है, Qt मालिकाना विकल्प सहित विभिन्न लाइसेंसों के तहत है, wxWidgets अपने खुद के wxWindows लाइसेंस (wxWidgets लाइसेंस का नाम बदलने के साथ) के तहत है, और FLTK अपवाद के साथ LGPL के अंतर्गत है। संदर्भ, ट्यूटोरियल और पुस्तकों के लिए, विवरण के लिए प्रत्येक की वेबसाइट देखें।


9
MFC बुराई है। अगर मेरे पास कोई अन्य विकल्प नहीं था, तो मैं विन एपीआई का उपयोग करना चाहूंगा।
The_drow


18

चूँकि मैं पहले से ही आप जहाँ अभी हूँ, मुझे लगता है कि मैं आपको "जवाब" दे सकता हूँ।

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

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

इसे योग करने के लिए, GUI विकास के लिए गैर मुक्त "वातावरण" भी हैं जैसे कि Microsoft से विजुअल स्टूडियो। डेल्फी अनुभव पृष्ठभूमि वाले लोगों के लिए , विजुअल स्टूडियो अधिक परिचित हो सकता है। Microsoft से प्रदत्त पूर्ण विज़ुअल स्टूडियो वातावरण के लिए भी मुफ्त विकल्प हैं: विज़ुअल स्टूडियो एक्सप्रेस , जो GUI विकास पर शुरू करने के लिए पर्याप्त से अधिक है।


15

मुझे एक "सरल" ट्यूटोरियल वाली वेबसाइट मिली: http://www.winprog.org/tutorial/start.html


8
यह Win32 API, GUI प्रोग्रामिंग के लिए एक बहुत ही निम्न स्तर के दृष्टिकोण का परिचय देता है जो आपको विंडोज प्लेटफॉर्म से जोड़ता है। मैं यह सलाह नहीं दूंगा।
वोग जूल 27'09

17
यह एक वैध विकल्प है। मैं मानता हूं कि यह शुरू करने के लिए सबसे अच्छी जगह नहीं हो सकती है, लेकिन यह एक डाउन वोट के लायक नहीं है।
एमिल एच।

1
मुझे पता है कि यह आदर्श समाधान नहीं है, लेकिन यह सीखने में मदद करता है कि विंडोज में गुई प्रणाली कैसे काम करती है। मैंने इस ट्यूटोरियल को कुछ साल पहले पढ़ा है और अब मुझे पता है कि मैसेज लूप क्या है और यह कैसे काम करता है। जब .net में विनफॉर्म के साथ काम करना यह ज्ञान काम आ सकता है।
ZippyV

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

@Jim In Texas: मैं सहमत हूँ, लेकिन इस "निम्न स्तर के बिट" को मूल बातों के बाद सीखा जाना चाहिए , इसलिए मुझे अभी भी शुरुआती लोगों के लिए यह सिफारिश अनुचित लगती है।
वोग

3

C ++ में .NET Windows GUI बनाना आसान है।

MSDN से निम्न ट्यूटोरियल देखें । आप अपनी जरूरत की हर चीज (विजुअल C ++ एक्सप्रेस) मुफ्त में डाउनलोड कर सकते हैं

बेशक आप अपने आप को .NET से बाँध लेते हैं, लेकिन यदि आप केवल आसपास ही खेल रहे हैं या आपको केवल एक Windows एप्लिकेशन की आवश्यकता है तो आप ठीक हो जाएंगे (ज्यादातर लोगों के पास अभी भी Windows है ...)।


3

मैं FLTK का उपयोग करता हूं क्योंकि Qt मुक्त नहीं है। मैं wxWidgets नहीं चुनता , क्योंकि एक साधारण हैलो, वर्ल्ड के साथ मेरा पहला टेस्ट ! कार्यक्रम 24 एमबी, FLTK 0.8 एमबी के एक निष्पादन योग्य उत्पादन किया ...


4
क्यूटी लाइसेंस परिवर्तनों के कारण, मैं क्यूटी करने के लिए स्विच करने की योजना
pernecker

2
मेरा अपना wxWidgets प्रोग्राम 5.9 एमबी का है, यहां तक कि सभी जुड़े हुए पुस्तकालयों के साथ भी
msangel
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.