2012-12-31 18 views
5

मेरे पास एक कस्टम विजेट है जिसमें QVBoxLayout का एक संपूर्ण लेआउट है। इसमें कई लेबल, एक QFormLayout, एक बटन, और सभी अतिरिक्त जगह खाने के लिए एक खिंचाव शामिल है। लेबलों में से एक काफी बड़ा हो सकता है इसलिए मैं यह सुनिश्चित करने की कोशिश कर रहा हूं कि कोई अजीब मामला नहीं है जहां टेक्स्ट अपठनीय है। यह विजेट यह सुनिश्चित करने के लिए एक QScrollArea के भीतर निहित है कि यदि उपयोगकर्ता समग्र विंडो को छोटा करता है तो विजेट के सभी पहलुओं को अभी भी देखा जा सकता है।QLabel आकार बदलने का पाठ

क्यूएलएबल ठीक आकार का आकार बदलता प्रतीत होता है, लेकिन एक बार जब यह नाबालिग के एक निश्चित बिंदु तक पहुंच जाता है तो यह लेबल की निचली कुछ पंक्तियों में कटौती करता है और विजेट के निचले भाग में स्थान को स्थानांतरित करता है।

मैं डिजाइनर के बिना कोड में यह सब कर रहा हूं, इसलिए यह पूरी तरह से संभव है कि मुझे कुछ याद आ रहा है। उप-घटक निम्न क्रम में समग्र QVBoxLayout जोड़े जाते हैं:

OverallLayout = new QVBoxLayout(this); 
Title   = new QLabel(); 
Description = new QLabel(); 
SubRegion  = new QFormLayout(); 
Button  = new QButton(); 
... 
// set text values, wordWrap(true), and Font for labels 
OverallLayout->addWidget(Title); 
OverallLayout->addWidget(Description); 
OverallLayout->addLayout(SubRegion); 
OverallLayout->addStrut(MIN_DIST); 
OverallLayout->addWidget(Button); 
OverallLayout->addStretch(STRETCH_FACTOR); 

टेस्ट परिणाम: QLabel के sizeHint() फ़ंक्शन से लौटे परिणाम की जांच करना, मूल्यों वापसी हुई विजेट क्षैतिज सिकुड़ रहा है बदलने के लिए नहीं दिखाई देते। हालांकि, QLabel अधिक लंबवत कमरे (153 के संकेत के रूप में 153) लेने के लिए विस्तार करता है, बस सभी पाठ फिट करने के लिए पर्याप्त नहीं है। जब QLabel पहली बार दिखाया गया है, तो इसके आकार की तुलना में इसमें कम पिक्सेल है लेकिन इसकी ऊंचाई के लिए अभी भी पर्याप्त है। जब इसका आकार बदलता है, तो इसकी ऊंचाई से 30 गुना कम होता है, इसके आकार की तुलना में अधिक है लेकिन इसके आकार से अधिक है।

मैंने जांच की है और बड़े QLabel के पास हैइटफायरविड्थ() और wordWrap() मान सत्य पर सेट हैं। मैं क्या गलत कर रहा हूं?

+0

क्या आप कोड स्निपेट जोड़ सकते हैं जहां ये विजेट लेआउट में जोड़े जा रहे हैं? मुझे लगता है कि आपको setMinimumHeight() द्वारा QLabel का न्यूनतम आकार सेट करना चाहिए ताकि कोई कट ऑफ न हो। वैकल्पिक रूप से आप स्पेसर तत्व के लिए अधिकतम ऊंचाई मान सेट कर सकते हैं। –

+0

एक तरीका जिस पर मैंने इसे ठीक करने का विचार किया है, वह आकार बदलने वाली विधि से जुड़ा हुआ है और ऊंचाई लेबल पर न्यूनतम ऊंचाई सेट है, विवरण लेबल के लिए फोर्डविड्थ (चौड़ाई) मान। हालांकि यह थोड़ा सा झुकाव लगता है, इसलिए मैं सोच रहा था कि लेआउट मैनेजर को अपना काम करने का उचित तरीका क्या होगा। – ElCraneo

+0

लेकिन 'setMinimumHeight() 'का उपयोग करने के सुझाव के बारे में क्या? – jdi

उत्तर

2

मैं क्यूएलएबल के अधिकतम मूल्य को गतिशील रूप से सेट करने के लिए विजेट के resizeEvent(QResizeEvent *evt) फ़ंक्शन को ओवरराइट करने की विधि के साथ आगे बढ़ गया।

void MyWidget::resizeEvent (QResizeEvent *evt) { 
    int newHeight = Description.heightForWidth(Description.width()); 
    Description.setMaximumHeight(newHeight); 
    QWidget::resizeEvent(evt); 
    // Note: I'm not sure if this last step is necessary 
} 

एक दिलचस्प आइटम ध्यान दें कि यदि आप setMinimumHeight(newHeight) और setMaximumHeight(newHeight) दोनों लेबल खड़ी बढ़ेगा पाठ फिट करने के लिए, लेकिन यह हटना कभी नहीं होगा जब लेबल क्षैतिज बढ़ता है और अतिरिक्त स्थान की आवश्यकता नहीं है। मेरा अनुमान है कि heightForWidth(int w) विजेट की न्यूनतम हाइट और वास्तव में आवश्यक पिक्सेल के बीच अधिकतम देता है। अजीब हिस्सा यह है कि यह वर्तमान अधिकतम हाइट से अधिक मूल्य को वापस करने की परवाह नहीं करता है।

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