2008-12-16 8 views
11

से QWidgets को कैसे निकालें मेरे ऐप में एक QSplitter द्वारा विभाजित एक खिड़की है, और मुझे एक विजेट को हटाने की आवश्यकता है।QSplitter

मैं यह कैसे कर सकता हूं? मुझे उपयोगी तरीके नहीं मिल रहे हैं

उत्तर

10

क्यूटी में कई चीजें "पारंपरिक रूप से" नहीं हटाई जा सकती हैं। इसके बजाय इसे छुपाएं() पर कॉल करें और इसे नष्ट करें। QSplitter प्रलेखन से:

जब आप को छिपाने() एक बच्चे को अपने अंतरिक्ष अन्य बच्चों के बीच वितरित किया जाएगा। जब आप इसे फिर से दिखाएंगे तो इसे बहाल किया जाएगा।

1

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

19

यदि आप विजेट को संरक्षित करना चाहते हैं और इसे कहीं और रखना चाहते हैं, या यदि आप विजेट को नष्ट करना चाहते हैं तो यह मुझे स्पष्ट नहीं है।

  • विजेट को नष्ट: आप विजेट के लिए सूचक प्राप्त कर सकते हैं हैं, तो आप बस इसे हटा सकते हैं। स्प्लिटर सुरक्षित रूप से सूचित किया जाएगा कि उसका बच्चा हटाया जा रहा है और इसे से हटा देगा।

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

आप शून्य (cjhuitt का जवाब) को माता-पिता को सेट करने के बारे में पता है कि अब आप कि स्मृति की सफाई क्योंकि विजेट नहीं रह गया है एक पैरेंट है के लिए जिम्मेदार हैं होना चाहते हैं।

+2

ध्यान दें कि आप अपने विजेट एक मुख्य विंडो ... (जब तक आप यह पहली बार छिपाना।) –

0

यदि आप विजेट में पॉइंटर रखते हैं, तो बस इसे हटाएं, या हटाएं() को हटाएं यदि आप सुरक्षित पक्ष में रहना चाहते हैं।

यदि आपके पास विजेट पॉइंटर नहीं है, तो QSplitter :: विजेट (int अनुक्रमणिका) फ़ंक्शन का उपयोग करें। फिर, आप इसका डिलीटलाटर() स्लॉट का उपयोग कर सकते हैं।

यदि आपके पास विजेट इंडेक्स नहीं है, लेकिन आप अभी भी विजेट ऑब्जेक्टनाम() को जानते हैं, तो QObject :: findChild() विजेट पॉइंटर प्राप्त करने का आपका एकमात्र तरीका है।

0

बच्चे विजेट को हटाने से रोकने का एक और आसान तरीका QSplitter.takeWidget (बच्चा) का उपयोग करना है। यह एक स्प्लिटर से विजेट को हटाने का भी अनुशंसित तरीका है। (क्यूटी दस्तावेज़ीकरण)

+2

के लिए दस्तावेज़ का एक लिंक प्रदान हो जाता है शून्य पर मूल सेट जब takeWidget। – W55tKQbuRu28Q4xv

0

मैं एक ही समस्या में भाग गया। क्यूटी 4.8 में एक क्यूएसप्लिटर के विजेट में अस्थायी रूप से छिपाने के लिए मैं बस इसे छुपाता हूं। हालांकि यह पर्याप्त नहीं है, क्योंकि स्प्लिटर हैंडल अभी भी स्थानांतरित करने के लिए उपलब्ध है।लेकिन संभाल पहुँचा और साथ ही छिपा हो सकता है:

frameA->setVisible(conditionA); 
frameB->setVisible(conditionB); 
if (!(conditionA && conditionB)) // if only 1 frame is visible 
{ 
    splitter->handle(0)->setVisible(false); 
}