2012-03-30 18 views
5

बच्चे-अभिभावक पदानुक्रम निम्न है: मुख्यविंडो -> केंद्रीय विजिट -> फ्रेम -> विजेट।एक बच्चे विजेट के आधार पर QMainWindow का आकार बदलें?

एप्लिकेशन जीवनकाल के दौरान विजेट का आकार बदल रहा है, हालांकि यह हमेशा एक निश्चित आकार पर सेट होता है। मैं QMainWindow उस पर आधारित आकार बदलना चाहता हूं - सभी विजेट प्रदर्शित करने के लिए आवश्यक न्यूनतम आकार रखने के लिए।

ऐसा करने के लिए मुझे वर्तमान में ऐसा करना है।

widget->setFixedSize(x, y); 
frame->setFixedSize(frame->sizeHint()); 
centralWidget->setFixedSize(centralWidget->sizeHint()); 
mainWindow->setFixedSize(mainWindow->sizeHint()); 

यदि मैं केवल मुख्य विंडो का आकार बदलता हूं तो यह ठीक से काम नहीं करता है। इस काम के लिए विजेट के सभी माता-पिता को आकार बदलने की आवश्यकता है। क्या कोई और सुरुचिपूर्ण तरीका है? क्या मुख्य विंडो कॉल अपने सभी बच्चों पर आकार बदलना संभव है?

नोट: 'विजेट' को छोड़कर सभी विजेट स्वचालित लेआउट प्रबंधन हैं। तो मुझे यह अजीब लगता है कि वे 'विजेट' के आधार पर खुद का आकार बदल नहीं सकते हैं।

+1

मैं आपके सवाल का पूरी तरह से समझ नहीं किया जा सकता है में मदद करता है, लेकिन आप कॉल नहीं कर सकते 'setMinimumSize()' बजाय 'setFixedSize की()'? – Chris

उत्तर

2

यह विगेट्स के आकार और स्थिति को निर्धारित करने के लिए लेआउट का काम है। इसलिए यदि आप लेआउट के अंदर मौजूद एक बच्चे विजेट का स्पष्ट रूप से आकार बदलते हैं, तो आपको यह सुनिश्चित करना होगा कि नया आकार लेआउट सिस्टम के माध्यम से सही ढंग से पारित हो। यह सुनिश्चित करके किया जा सकता है कि विजेट का आकार हिंट() नया आकार देता है। जब आकार लेआउट नए आकार की गणना करता है तो sizeHint() द्वारा दिया गया मान उपयोग किया जाएगा। तो आकार के बाद() बदल गया है, बस अद्यतन जीमेट्री() [qt.nokia.com] को कॉल करें जो विजेट बदल गया है और लेआउट सिस्टम को सूचित करेगा और ज्यामिति बदलने की आवश्यकता हो सकती है।

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

अधिक जानकारी के लिए इस जाँच के लिए ...

http://qt-project.org/faq/answer/how_can_i_trigger_the_parent_widget_to_resize_when_its_child_widget_is_resi

1

आप लेआउट प्रबंधित विजेट आकार देना चाहिए।

  1. लेआउट जब आप एक माता पिता के सभी बच्चों के आकार नीति आप उन्हें प्रदान के बारे में भी आकार बदलने कर रहे हैं आकार बदलने रहे हैं: जहाँ तक मैं चिंतित हूँ 2 स्थितियों है। यदि आप एक निश्चित पॉलिसी चुनते हैं तो बच्चों का आकार बदल नहीं जाएगा। तो आपको उन्हें हाथ से आकार बदलना होगा ... लेकिन यह अजीब छोड़ दिया गया है।

  2. जब आप अपने जैसे बच्चे का आकार बदल रहे हैं, तो माता-पिता का स्वचालित रूप से आकार बदल नहीं जाता है। आपको इसे हाथ से करने की ज़रूरत है। सौभाग्य से इसके लिए एक "जादू कार्य है: समायोजित करें। अगर आप इसे QMainWindow से कॉल करते हैं तो सभी विजेट का आकार उनके अनुकूलित आकार में बदल दिया जाएगा। यह संभव है (मैं इसे यहां परीक्षण नहीं कर सकता) कि यह आकार नीति पर रनटाइम पर काम नहीं करता है तय करने के लिए निर्धारित किया है।

आशा है कि

+0

क्यूटी 5.5। 'adjustSize 'काम नहीं करता है, 'आकार बदलें (आकार संकेत())' करता है। आंकड़ा जाओ। –

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