2011-09-16 11 views
8

डालने मुझे लगता है कि इसएक QWidget की ऊंचाई ढूँढना से पहले

+--------------------+ 
| +-------++-------+ | 
| |  ||  | | 
| |  ||  | | 
| |  || Label | | 
| | Label || Label | | 
| |  ||  | | 
| |  ||  | | 
| +-------++-------+ | 
+--------------------+ 

एक QWidget दो QVBoxLayouts, प्रत्येक एक या अधिक QLabels युक्त युक्त तत्व की तरह दिखता है सम्मिलित करने के लिए एक विजेट है।
यह विजेट वर्टिकल लेआउट में डाला जा रहा है जिसमें एक खिंचाव सेल है, इसलिए इस प्रकार के सभी विजेट शीर्ष पर जाएंगे और छोटी ऊंचाई तक कम हो जाएंगे।

इस तरह के कुछ में परिणाम।

______________________ ← Layout boundary 
+--------------------+ 
| +-------++-------+ | 
| |  || Label | | 
| | Label || Label | | ← Widget shrunk to the smallest 
| +-------++-------+ | 
+--------------------+ 
______________________ ← Layout boundary 
      ↑ 
      | 
      | ← Spacer 
      | 
      ↓ 
______________________ ← Layout boundary 

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

मैंने वैकल्पिक अदृश्य लेआउट में विजेट डालने जैसे पहले से ही कई दृष्टिकोणों का प्रयास किया है, इसलिए जब मैं डाला गया तो मैं अपनी ऊंचाई को पुनः प्राप्त कर सकता हूं, जो कि मेरे निश्चित लेआउट में डालने पर विजेट होना चाहिए।

लेकिन किसी कारण से मुझे हमेशा 480 या 478 मिलते हैं जब विजेट लंबवत दबाए जाने पर 50px ऊंचाई पर होता है। तो मैं पूरी तरह से खो गया हूँ।

मुझे ऐसा करना है क्योंकि मुझे डालने के दौरान एनिमेट करने के लिए विजेट की आवश्यकता है, और मुझे ऊंचाई 1 से एनिमेट करने के लिए ऊंचाई लेने की आवश्यकता है।

मैं यह कैसे कर सकता हूं?

+1

बेहद प्रासंगिक, लेकिन भयानक आरेख नहीं;) – Blender

+1

क्या आपने विजेट के आंतरिक लेआउट के लिए QLayout :: minimalSize() का प्रयास किया है? – Robin

उत्तर

6

सटीक कोड होने के बिना, यह निश्चित रूप से कहना कठिन है, लेकिन सिर्फ, अपने उदाहरण पुन: पेश करने का प्रयास किया हो रही है उपरोक्त विवरण से, मैं निम्नलिखित बातें पर रखने का सुझाव देते हैं:

  1. ऐसा लगता है जैसा कि विजेट प्रदर्शित होने से पहले आप वास्तव में widget->height() पर कॉल कर रहे हैं। इसके बजाए, इसके बजाए widget->sizeHint().height() पर कॉल करने का प्रयास करें। QWidget::sizeHint() विधि आपको बताती है कि विजेट होना चाहिए, यदि मूल ज्यामिति उस पर कोई अन्य बाधा नहीं डालता है।

  2. यदि आप sizeHint() प्राप्त कर रहे हैं और अभी भी गलत जवाब प्राप्त कर रहे हैं, तो QWidget::ensurePolished() के लिए प्रलेखन देखें। मुझे विश्वास है कि यह महत्वपूर्ण है इस फोन करने के लिए, विजेट है कि अभी तक प्रदर्शित नहीं किया गया है के लिए और अधिक सटीक ज्यामिति पाने के लिए:

    QWidget इस समारोह के बाद यह पूरी तरह से निर्माण किया गया है कहता है लेकिन इससे पहले कि यह बहुत पहले समय दिखाया गया है। यदि आप यह सुनिश्चित करना चाहते हैं कि विजेट को ऑपरेशन करने से पहले पॉलिश किया गया है, तो आप इस फ़ंक्शन को कॉल कर सकते हैं, उदाहरण के लिए, विजेट के आकार में सही फ़ॉन्ट आकार की आवश्यकता हो सकती है संकेत() पुनर्मूल्यांकन।

  3. और अगर आप अभी भी परेशानी हो रही है, तो QWidget::sizePolicy() के लिए दस्तावेज़ पर एक नज़र, और कक्षा QSizePolicy Class Reference है। मुझे यह स्वीकार करना होगा कि कई बार मैंने enum QSizePolicy::Policy पर दस्तावेज़ों को पढ़ा है, वे कभी भी डूब नहीं जाते हैं। एक गलत आकार नीति मान आपके लेआउट को गड़बड़ करना वास्तव में आसान है।

    वास्तव में आकार नीति लागू करने से पहले, क्यूटी डिजाइनर में विभिन्न आकार नीतियों के साथ प्रयोग करने लायक हो सकता है।

+0

+1 - 480 की ऊंचाई लगभग निश्चित रूप से है क्योंकि इसे कभी प्रदर्शित नहीं किया गया है। आकार संकेत() ऊंचाई() या लेआउट-> न्यूनतम आकार() ऊंचाई() को –

+0

प्रदर्शित करने से पहले भी सही मान वापस करना चाहिए, मैंने पोस्टिंग के एक घंटे बाद इस समस्या को हल किया, लेकिन बहुत बदसूरत तरीके से ... शो () आईएनजी, ऊंचाई प्राप्त करना और फिर छुपाएं() आईएनजी। आपका रास्ता बहुत बेहतर काम करता है, मैंने इसे पहले से ही कोशिश की और काम करता है। शुरुआत में मैं '-> ज्यामिति.हेइट(); 'के साथ उपयोग कर रहा था;' जैसा कि आपने अनुमान लगाया था उतना ही लगता है जिसका मैं उपयोग कर रहा था। आदाब अर्ज है। – Ale

+0

उत्कृष्ट - मदद करने में खुशी! –