JUCE में दृश्य WYSISWYG संपादक के साथ सिंगल-पेज एप्लिकेशन बनाने से आ रहा है, मुझे नई विंडो (मुख्य जीयूआई विंडो के बाहर) को कैसे खोलना है, इस बारे में कुछ परेशानी हो रही है। मैंने एक टेस्ट एप्लिकेशन बनाया है जिसमें दृश्य संपादक के साथ बनाया गया एक छोटा न्यूनतम मुख्य जीयूआई है। इसमें एक बटन है "नई विंडो बनाएं।" मेरा लक्ष्य उस बटन पर क्लिक करने में सक्षम होना है और एक नई विंडो पॉप अप है और यह नई विंडो एक JUCE "GUI घटक" है (AKA, ग्राफिकल/विज़ुअल जीयूआई संपादक फ़ाइल)। अब, मेरे पास वास्तव में की तरह है, हालांकि, इसकी फेंकने वाली त्रुटियों और दावों को हासिल किया गया है, इसलिए एक बहुत ही सरल, चरण-दर-चरण ट्यूटोरियल प्राप्त करना बहुत अच्छा होगा।JUCE - एक नई विंडो बनाना
मैंने main.cpp फ़ाइल का अध्ययन किया है जो Projucer स्वचालित रूप से बनाया गया है ताकि यह महसूस हो सके कि वे विंडो कैसे बना रहे हैं। मैंने जो किया है वह यहाँ है।
1) मेरी परियोजना में, मैंने एक नया जीयूआई घटक जोड़ा (जो एक वर्ग बन गया) और इसे "InvokedWindow" कहा जाता है। 2) मेरे मुख्य जीयूआई घटक वर्ग शीर्षलेख में, मैंने InvokedWindow: ScopedPointer<InvokedWindow> invokedWindow;
3 के एक नए स्कोप्ड पॉइंटर को जोड़ा है 3) मैंने "मेक न्यू विंडो" नामक मुख्य जीयूआई संपादक में एक नया बटन बनाया और इसे हैंडलर कोड में जोड़ा: newWindowPtr = new InvokedWindow;
ताकि जब भी बटन मारा जाता है, तो InvokedWindow प्रकार का एक नया ऑब्जेक्ट बनाया जाता है। 4) InvokedWindow कक्षा में, निर्माता में स्वत: उत्पन्न कोड के शीर्ष पर, मैं कहा:
setUsingNativeTitleBar (true);
setCentrePosition(400, 400);
setVisible (true);
setResizable(false, false);
कौन सा मैं इन सबसे छुटकारा Juce अनुप्रयोग का मुख्य फ़ाइल से मिला है।
मैंने कार्यक्षमता जोड़ने के लिए इस नई विंडो में एक स्लाइडर भी जोड़ा।
5) मैं मुझे विंडो को बंद करने देने के लिए एक ओवरलोड समारोह कहा:
void InvokedWindow::closeButtonPressed()
{
delete this;
}
तो, अब जब मैं अनुप्रयोग चलाने और नई विंडो बटन पर क्लिक करें, एक नई विंडो पॉप अप करता है, लेकिन मैं एक अभिकथन मिलती है:
/* Agh! You shouldn't add components directly to a ResizableWindow - this class
manages its child components automatically, and if you add your own it'll cause
trouble. Instead, use setContentComponent() to give it a component which
will be automatically resized and kept in the right place - then you can add
subcomponents to the content comp. See the notes for the ResizableWindow class
for more info.
If you really know what you're doing and want to avoid this assertion, just call
Component::addAndMakeVisible directly.
*/
इसके अलावा, मैं एक बार विंडो बंद करें और एक नई विंडो का एक और उदाहरण बनाने के लिए मुख्य GUI में बटन हिट करने में सक्षम हूँ, लेकिन यह दूसरी बार बंद करने में कोई त्रुटि की ओर जाता है:
template <typename ObjectType>
struct ContainerDeletePolicy
{
static void destroy (ObjectType* object)
{
// If the line below triggers a compiler error, it means that you are using
// an incomplete type for ObjectType (for example, a type that is declared
// but not defined). This is a problem because then the following delete is
// undefined behaviour. The purpose of the sizeof is to capture this situation.
// If this was caused by a ScopedPointer to a forward-declared type, move the
// implementation of all methods trying to use the ScopedPointer (e.g. the destructor
// of the class owning it) into cpp files where they can see to the definition
// of ObjectType. This should fix the error.
ignoreUnused (sizeof (ObjectType));
delete object;
}
};
यह मेरे सिर पर थोड़ा सा है। मुझे लगता था कि बटन के माध्यम से एक नई विंडो बनाने में सक्षम होने के लिए यह बहुत बुरा नहीं होगा। एक नई विंडो जिसे मैं ग्राफिकल जीयूआई संपादक के साथ संपादित कर सकता हूं, लेकिन मैंने कोशिश की है कि मैं इसे पूरी तरह से समझ नहीं पा रहा हूं। क्या कोई इसे सही तरीके से करने के लिए एक चरण-दर-चरण मार्गदर्शिका पोस्ट कर सकता है? मैंने इसे JUCE मंचों पर पोस्ट किया था, लेकिन जीयूआई प्रोग्रामिंग की कमी के कारण, मैं पोस्ट किए गए समाधान (मेरी अपनी गलती) को समझने में असमर्थ था, इसलिए मुझे उम्मीद है कि यह एक बहुत ही सरल मार्गदर्शिका प्राप्त करेगी। इसकी बहुत सराहना की जाएगी। धन्यवाद।
मुझे लगता है कि इस पोस्ट को इसकी लंबाई के लिए डाउनवॉटेड किया जा रहा है, लेकिन मुझे लगता है कि यह मेरी स्थिति और प्रश्न का सही वर्णन करने के लिए लंबे समय तक होना आवश्यक है। बहुत कम जानकारी प्रदान करने से कुछ भी बदतर नहीं है, फिर ऐसे समाधान प्राप्त करना जो आपकी समस्या पर लागू नहीं होते हैं क्योंकि आपकी समस्या का गलत अर्थ है या महत्वपूर्ण जानकारी की कमी है। –
आपके प्रश्न के साथ कुछ भी गलत नहीं है, आपने यह जानने का एक अच्छा काम किया है कि आप +1 चाहते हैं और यदि आप एक गाइड की तलाश में हैं, तो शायद आप इसे आजमा सकते हैं: https://www.juce.com/doc/tutorial_main_window मैं व्यक्तिगत रूप से पहले यह नहीं किया है, लेकिन यह कैसे करने के लिए उत्सुक हूँ। –
@ किंगिंगलोड, आश्वासन के लिए धन्यवाद। मैं अक्सर अपनी पोस्ट लंबाई के लिए मतदान मिलता है। इसके अलावा, मैं उस ट्यूटोरियल के माध्यम से रहा हूं और यह काफी अच्छा है, हालांकि, मेरा मानना है कि यह आपको केवल एक विंडो जोड़ने देता है जिसे आपको सबकुछ कोड करना है (अर्थात्, यदि आप उस नई विंडो में स्लाइडर को जोड़ना चाहते हैं, घुंडी, लेबल, पाठ संपादक, आदि ... आप इसे JUCE में आलेखीय संपादक के माध्यम से सम्मिलित नहीं कर सकते हैं, आपको अपने प्लेसमेंट, पैरामीटर इत्यादि को कोड-कोड करना होगा)। मैं जानना चाहता हूं कि एक नई विंडो कैसे खोलें, लेकिन वह विंडो ग्राफ़िकल JUCE संपादक के माध्यम से संपादन योग्य हो। –