2011-06-13 25 views
28

क्या इसकी सामग्री में QListWidget ऊंचाई और चौड़ाई समायोजित करना संभव है?QListWidget सामग्री के आकार को समायोजित करें

sizeHint() हमेशा 256, 192 देता है इससे कोई फर्क नहीं पड़ता कि इसकी सामग्री क्या है।
QListWidgetItem का sizeHint()-1, -1 देता है, इसलिए मुझे सामग्री चौड़ाई नहीं मिल सकती है।

समस्या जैसी ही है - http://www.qtcentre.org/threads/31787-QListWidget-width, लेकिन कोई समाधान नहीं है।

enter image description here

import sys 
from PyQt4.QtGui import * 

class MainWindow(QWidget): 
    def __init__(self, parent=None): 
     QWidget.__init__(self, parent) 

     list = QListWidget() 
     list.addItem('111111111111111') 

     vbox = QVBoxLayout(self) 
     vbox.addWidget(list) 

app = QApplication(sys.argv) 
myapp = MainWindow() 
myapp.show() 
sys.exit(app.exec_()) 

उत्तर

37

sizeHint() हमेशा 256 देता है, 192 कोई बात नहीं क्या अपनी सामग्री है के लिए इस दस्तावेज़ पढ़ें।

Thats क्योंकि यह QListWidget, व्यूपोर्ट का आकार है, आइटम नहीं। sizeHintForColumn() आप सभी आइटम से अधिक अधिकतम आकार दे देंगे, तो आप इस तरह विजेट का आकार बदलने कर सकते हैं:

list.setMinimumWidth(list.sizeHintForColumn(0)) 

आप, न्यूनतम चौड़ाई के लिए मजबूर तो उपवर्ग और बदले आकार संकेत के रूप में इस प्रदान करने के लिए नहीं करना चाहते हैं। उदा।

class ListWidget(QListWidget): 
    def sizeHint(self): 
    s = QSize() 
    s.setHeight(super(ListWidget,self).sizeHint().height()) 
    s.setWidth(self.sizeHintForColumn(0)) 
    return s 
+0

यह काम करता है। बस +5 पीएक्स जोड़ने की जरूरत है ताकि कोई स्क्रॉलबार न हो। मैं व्यूपोर्ट्स के बारे में कहां पढ़ सकता हूं? यह नहीं मिल सकता। – Qiao

+1

QAbstractScrollArea – takoi

+1

देखें यदि वर्टिकल स्क्रॉलबार होगा, वांछित लेआउट में ListWidget डालने के बाद निम्न दो पंक्तियों का उपयोग करें: 'list_widget.updateGeometry() 'और फिर' list_widget.verticalScrollBar()। Width()' – Jeff

-2

आप अपने QListWidget की QHeaderView हो और इसके आकार बदलने मोड समायोजित करने की आवश्यकता।

अधिक जानकारी

http://doc.qt.nokia.com/latest/qheaderview.html#ResizeMode-enum

+0

और जहां मैं अपने QListWidget की QHeaderView करने के बारे में पढ़ सकते हैं? सूची के दस्तावेज़ों और उसके माता-पिता वर्गों में शीर्षलेख के बारे में उल्लेख नहीं मिल रहा है। – Qiao

+0

ठीक है QHeaderView के बारे में भूल जाओ। आकार नीति सेट करने के बाद, [doc] समायोजित करने के लिए आकार बदलें मोड को सेट करने का प्रयास करें (http://doc.qt.nokia.com/latest/qlistview.html#ResizeMode-enum) – emaillenin

+0

यह काम नहीं करता है। 'sizeHint()' हमेशा 256, 1 9 2 लौटाता है, आकार नीति इसे बदल नहीं सकती है। – Qiao

2

प्रभावी रूप से आकार का उपयोग करने के लिए, आपको इसे कम से कम सी ++ में ओवरराइड करना होगा। मेरे अनुभव में, जब आप एक विशिष्ट व्यवहार चाहते हैं तो विगेट्स के लिए डिफ़ॉल्ट कार्यान्वयन बहुत बेकार हो सकता है। आप जो स्पैसर या लेआउट के साथ आपदा में अंतराल चाहते हैं उसे मजबूर करने के प्रयास। यदि आप QListWidget से प्राप्त कर सकते हैं और आकार को ओवरराइड कर सकते हैं, तो आप अपने आइटमों के माध्यम से पुन: प्रयास कर सकते हैं और सबसे लंबी स्ट्रिंग पा सकते हैं, फिर यह निर्धारित करने के लिए कि यह कितना चौड़ा होना चाहिए, किसी प्रकार का जादू करें।

वही है जो मैं करता हूं, वैसे भी।

-1

सबसे पहले आपको सूची में अपनी सबसे बड़ी स्ट्रिंग प्राप्त करनी चाहिए, जो प्राप्त करना आसान है।

QFontMetrics * fm = new QFontMetrics(widget->font()); 
QRect rect; 
rect = fm->boundingRect(string); 

rect.width() सबसे बड़ा स्ट्रिंग rect.height की पिक्सेल में चौड़ाई() यह ऊंचाई है है है:

के बाद आप उस स्ट्रिंग मिलता है, निम्न कार्य करें।

सेट कि रेक्ट की चौड़ाई (प्लस मार्जिन) को QListWidget चौड़ाई और यह आइटम

मैं कोड का परीक्षण नहीं किया था की संख्या कि रेक्ट की ऊंचाई बार करने के लिए ऊंचाई है, लेकिन आशा है कि यह सही पर डालता है ट्रैक

-1
QListWidget *valList; 

valList = new QListWidget(this); 

valList->setSizePolicy (QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored)); 
valList->setMinimumSize (QSize(1111, 111)); 
8

takois answer का उपयोग करते हुए मैं sizeHintForColumn या sizeHintForRow के साथ चारों ओर खेला और पाया आप थोड़ा बड़ा संख्या जोड़ने के लिए, क्योंकि वहाँ कुछ शैली निर्भर मार्जिन अभी भी हो सकता है है। ekhumoros comment फिर मुझे सही रास्ते पर रखो।

संक्षिप्त सूची विजेट का पूर्ण आकार में है:

list.sizeHintForColumn(0) + 2 * list.frameWidth() 
list.sizeHintForRow(0) * list.count() + 2 * list.frameWidth()) 

comment के अनुसार वायलेट द्वारा यह क्यूटी में काम नहीं कर सकता 5.

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

एक QListWidget अपनी सामग्री आकार के ajusted के लिए मेरा पूरा उदाहरण:

from PySide import QtGui, QtCore 

app = QtGui.QApplication([]) 

window = QtGui.QWidget() 
layout = QtGui.QVBoxLayout(window) 
list = QtGui.QListWidget() 
list.addItems(['Winnie Puh', 'Monday', 'Tuesday', 'Minnesota', 'Dracula Calista Flockhart Meningitis', 'Once', '123345', 'Fin']) 
list.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) 
list.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) 
list.setFixedSize(list.sizeHintForColumn(0) + 2 * list.frameWidth(), list.sizeHintForRow(0) * list.count() + 2 * list.frameWidth()) 
layout.addWidget(list) 

window.show() 

app.exec_() 
+0

अगर किसी को लापता मार्जिन के लिए बेहतर अभिव्यक्ति मिलती है तो कृपया यहां टिप्पणी करें। – Trilarion

+1

आपको सही समग्र आकार प्राप्त करने के लिए चौड़ाई और ऊंचाई पर 'list.frameWidth() * 2' जोड़ने की आवश्यकता है। – ekhumoro

+0

@ekhumoro मदद के लिए बहुत बहुत धन्यवाद। मैंने इसे जवाब में शामिल किया। – Trilarion

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