2010-09-10 9 views
6

आप QListWidget के व्यवहार को कैसे बदलते हैं ताकि यह एक (प्रतीत होता है मनमानी) ऊंचाई चुनने और स्क्रॉलबार जोड़ने के बजाय इसकी ऊंचाई का आकार बदल सके? देखें स्क्रीनशॉट:QListWidget जो स्क्रॉल के बजाय आकार बदलता है

screen shot

QListView की क्षैतिज रूप में ज्यादा जगह को भरने चाहिए, क्योंकि वे कर सकते हैं (के रूप में कई बनाने "कॉलम," अगर आप करेंगे।) तब वे लपेट और करने के लिए आवश्यक के रूप में के रूप में कई पंक्तियों बनाने सभी वस्तुओं को फिट करें। खिड़की का आकार बदलने के बाद इन गणनाओं को समायोजित किया जाना चाहिए। यह सब ठीक काम कर रहा है।

हालांकि, मैं क्या चाहता हूं ऐसा होना चाहिए कि ऊंचाई रहने की बजाय, QListView लंबवत रूप से बढ़ना या हटाना चाहिए और किसी भी स्क्रॉलबार की आवश्यकता नहीं है। स्क्रॉलिंग, यदि आवश्यक हो, तो माता-पिता QWidget पर संभाला जाएगा जो सभी लेबल और सूचियों को होस्ट करता है। ऐसा लगता है कि QListWidget की ऊंचाई एक बार स्थापित हो गई है (सुनिश्चित नहीं है कि इसका डिफ़ॉल्ट कहां से आ रहा है), यह कभी भी नहीं बदलता है। यह कुछ मामलों में बहुत बड़ा है (ऊपर दूसरी "टेस्ट" सूची देखें) और दूसरों में बहुत छोटा (देखें पहले "रिक्त मानचित्र" सूची देखें।)

ऊपर लेआउट कुछ भी आश्चर्यजनक नहीं है: दो QLabel और दो QListWidget रों एक QVBoxLayout. यहाँ में गुण मैं QListWidget पर सेट किए गए हैं ':

setMovement(QListView::Static); 
setResizeMode(QListView::Adjust); 
setViewMode(QListView::IconMode); 
setIconSize(QSize(128, 128)); 

(मैं पहले से ही क्षैतिज और ऊर्ध्वाधर स्क्रॉलबार नीतियां निर्धारित करने की कोशिश की, लेकिन वह सिर्फ स्क्रॉलबार बंद हो जाती है, सामग्री कतरन नहीं। मैं क्या चाहता हूं।)

उत्तर

3

शायद आप QListWidget का उपयोग किये बिना ऐसा कर सकते हैं। क्यूटी के उदाहरणों में एक नया लेआउट क्लास, QFlowLayout शामिल है, जो उपयोगी हो सकता है। निम्न प्रकार के विजेट पदानुक्रम के साथ आप लेबल के साथ कई समूह प्राप्त कर सकते हैं और वे सभी एक QScrollArea के अंदर होंगे।

QScrollBox 
    QVBoxLayout 

    QLabel "Blank maps" 
    QWidget 
     QFlowLayout 
      your own widgets showing map images and labels 

    QLabel "Text" 
    QWidget 
     QFlowLayout 
      your own widgets 

समस्या यह है कि इस प्रकार का समाधान QListWidget आधारित समाधान की तुलना में अधिक विजेट बना देगा। तो यदि आपकी सूची में सैकड़ों आइटम हैं, तो यह सबसे अच्छा समाधान नहीं हो सकता है।

+1

ठीक है, यह बहुत करीब है। जब तक QScrollBox तस्वीर में नहीं है तब तक यह बहुत अच्छा काम करता है। जैसे ही मैं इसे जोड़ता हूं, क्यूवीबॉक्स लयआउट उतना पतला हो जाता है जितना वह कर सकता है और जब तक यह कर सकता है। (यह आकार बदल रहा है QSize का संकेत (1 9 7, 9 42)।मैंने QWidget :: setSizePolicy और QLayout :: setSizeConstraint के प्रत्येक संयोजन की कोशिश की है जिसे मैं सोच सकता हूं, और उस व्यवहार को कुछ भी बदल नहीं रहा है। रहस्य क्या है? –

+1

'QScrollArea :: setWidgetResizable()' FOR। । जीत !!! आपकी मदद के लिए बहुत बहुत धन्यवाद ... मैं 'QListWidget' खरगोश का निशान नीचे 2 दिन खो दिया। –

3

एक संरक्षित सदस्य समारोह है contentsSize()QListView में। इसका उपयोग स्क्रॉलबार के लिए आवश्यक minimum(), maximum(), और pageStep() की गणना करने के लिए किया जाता है (जैसा कि here बताया गया है)।

क्या आप QListView कक्षा को उप-वर्गीकृत कर सकते हैं और उस जानकारी का उपयोग कर सकते हैं? मेरा सुझाव है कि आप उसी विजेट में अपने विजेट का आकार पुन: गणना करें जहां आप इसमें सामग्री जोड़ते हैं। जबकि कुछ हद तक लालित्य की कमी है, यह एक बहुत ही विश्वसनीय समाधान प्रतीत होता है।

+0

वह संपत्ति उपयोगी दिखती है, लेकिन मुझे यकीन नहीं है कि इसका उपयोग कैसे किया जाए। उस आकार के साथ, QListWidget पर यह किस विधि को कॉल करने के लिए मजबूर किया जा सकता है? (या आकार संकेत बदलें?) क्षमा करें, यहां क्यूटी के लिए अपेक्षाकृत नया है, और यह मेरे लिए बहुत अस्पष्ट है। आपकी सहायताके लिए धन्यवाद! –

+0

आप इस आकार में 'sizeHint' सेट कर सकते हैं और 'sizeHintPolicy' को' निश्चित 'पर सेट कर सकते हैं; या 'setGeometry()' विधि का उपयोग करें। अस्वीकरण: मैंने परीक्षण नहीं किया कि मैं यहां क्या प्रस्तावित कर रहा हूं, लेकिन मुझे पूरा भरोसा है कि यह काम करेगा। – dpq

+4

मुझे 'QListWidget 'विरासत में मिला और' sizeHint() 'को वापस करने के लिए' सामग्री आकार()' को वापस किया गया। यह काम करता हैं! धन्यवाद। – swongu

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