2011-03-28 8 views
6

मुझे आश्चर्य है कि उत्पन्न होने वाली घटना को कैप्चर करना संभव है यदि सभी क्यूटी ऑब्जेक्ट्स प्रारंभ और तैयार हैं?क्यूटी घटना को कैप्चर करने का तरीका बताता है कि सभी गुई तत्व तैयार हैं

ऐसा लगता है कि कुछ चीजें विंडो के कन्स्ट्रक्टर में नहीं की जा सकती हैं। और वे स्लॉट कार्यान्वयन में ठीक काम करते हैं।

उदाहरण के लिए, मैं यह है कि

// in *.h 
MainWindow* rootWindow 

// in *.cpp 
rootWindow = qobject_cast<MainWindow *>(this->window()); 

पसंद है जब मैं अपने आवेदन की जड़ खिड़की तक पहुंचना चाहते हैं यह contructor मैं rootWindow वस्तु का उपयोग नहीं कर सकते हैं में किया जाता है, तो - यह रनटाइम त्रुटि couses।

लागू करने के लिए कोई प्रासंगिक स्लॉट नहीं है। और QMainWindow कक्षा में ईवेंट बनाएँ वर्चुअल नहीं है।

मदद के लिए धन्यवाद :)

+0

सभी तरह तुम क्या करने के लिए अपने विजेट डाली हैं? – Eugene

+0

यह मेरी मुख्य विंडो कक्षा QMainWindow पर आधारित है। यह वर्तमान वर्ग की एक संपत्ति है जो मुख्य खिड़की का बच्चा है। –

उत्तर

9

आप इस के लिए एक सिंगल-शॉट टाइमर का उपयोग कर सकते हैं। अपनी मुख्य विंडो कक्षा में, कहें, appReady() नामक एक स्लॉट फ़ंक्शन को परिभाषित करें। कन्स्ट्रक्टर में, QTimer::singleShot(0, this, SLOT(appReady())); का उपयोग करके एक शॉट टाइमर बनाएं और कनेक्ट करें इस टाइमर को ईवेंट लूप चालू होने और चलने के तुरंत बाद आग लगनी चाहिए और कोई और स्टार्टअप ईवेंट लंबित नहीं है।

+0

यही मुझे चाहिए :) धन्यवाद। –

0

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

इसे इसके बजाय निर्माता में एक स्पष्ट पैरामीटर के रूप में पास करें।

जब तक यह MainWindows नीचे :)

+0

मेरे फॉर्म QtCreator में gui डिजाइनर का उपयोग कर बनाए गए हैं। मुझे नहीं लगता कि मैं वस्तुएं बनने के तरीके को बदल सकता हूं। तंत्र को बढ़ावा देने के साथ मुझे लगता है कि यह असंभव है। –

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