2011-02-10 12 views
13

मैं पूर्वावलोकन कैसे करूं कि लेआउट नियम लागू होने के बाद विंडो में विजेट का आकार क्या होगा, से पहले मैं वास्तव में show() विजेट विंडो? ऐसा लगता है कि शुरुआती show() कमांड से पहले सभी आकार 100x30 हैं। मैं उसके चारों ओर कैसे जाऊं?किसी शो() से पहले लेआउट में विजेट के आकार का पूर्वावलोकन कैसे करें?

+0

इसके लिए आपको क्या चाहिए? –

+0

मेरी खुद की विजेट विंडो कक्षा, वस्तुओं के आकार की जांच करती है और निर्माण समय पर गतिशील विजेट जोड़ती है। मुझे उस चरण में एक लेआउट के बाद चीजें कैसे दिखेंगी इसका आकार मापने की आवश्यकता है। – JasonGenX

उत्तर

9

invalidate() मेरे लिए काम किया।

सूचना है कि यदि आप इसे निम्नलिखित के रूप में यहां से पूछा काम करेगा (कम से कम यह मेरे कोड में ठीक हो रहा है):

widget->show(); 
widget->layout()->invalidate(); 
widget->hide(); 

यह जब से तुम डॉन स्क्रीन पर विजेट प्रदर्शित नहीं करता है hide() होने तक कतार में वापस नियंत्रण छोड़ना नहीं है। बीच में, invalidate() सही स्थिति की गणना करता है।

4

आप के लिए "शो से पहले क्यूटी ज्यामिति" जो एक धागा qtcentre.org मंच पर Force geometry update of hidden widget शीर्षक जहां Wysota पढ़ सकते हैं पता चलता googling की कोशिश कर सकते जवाब:

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

और इस

क्यूटी :: WA_WState_ExplicitShowHide को सच की स्थापना की और क्यूटी :: WA_WState_Hidden गलत पर सेट। वास्तव में स्क्रीन पर विजेट दिखाए जाने से पहले (विशेष रूप से दूसरा एक) मानों को वापस करना सुनिश्चित करें।

2

सभी बाल विगेट्स और लेआउट के आकार के आधार पर शीर्ष स्तर विजेट के वांछित आकार को प्राप्त करने के लिए QWidget :: sizeHint का उपयोग करें। या वास्तव में लेआउट चलाने और पूरे विजेट पेड़ का आकार बदलने के लिए QWidget :: adjustSize को कॉल करें। ध्यान दें कि एडजस्ट साइज स्क्रीन के 2/3 तक शीर्ष स्तर की विंडो को सीमित कर देगा ताकि आपको बड़ी विंडो के लिए जो भी चाहिए वह प्राप्त न हो।

6

मेरे लिए, काम के बाद:

window->layout()->update() 
window->layout()->activate() 

यह शायद एलेक्सिस 'जवाब के रूप में ही होता है, लेकिन यह खिड़की दिखा-से-छुपा आवश्यकता नहीं है।

+0

यह मेरे लिए भी चाल है! मैं स्क्रीन पर अपनी खिड़की को केन्द्रित करने की कोशिश कर रहा था। यह तब तक बंद था जब तक कि मैंने विंडो को केंद्रित करने से ठीक पहले उन दो पंक्तियों को जोड़ा। – Onlyjus

1

मैं विभिन्न समाधान दूसरों के द्वारा पोस्ट (show & hide, update & activate, invalidate और WA_WState_ExplicitShowHide & WA_WState_Hidden) की कोशिश की, लेकिन कोई भी सभी विजेट मैं अपने आवेदन में show() कॉल करने से पहले केंद्र के लिए किया था के साथ सही था। मैंने खुदाई करने में घंटों बिताए और मेरी समस्या यह थी कि QWidgetItemV2 के अंदर गलत आकार कैश किए गए थे।कुछ मिनट बाद मैं इसके साथ आया:

for(auto*child:widget->findChildren<QWidget*>()){child->updateGeometry();} 
widget->updateGeometry(); 
संबंधित मुद्दे