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_())
Ответы
Ответ 1
sizeHint() всегда возвращает 256, 192 нет важно, каково его содержание.
Это потому, что это размер 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
Ответ 2
Используя takois answer Я играл с sizeHintForColumn
или sizeHintForRow
и обнаружил, что вам нужно добавить несколько большие числа, потому что может быть какая-то зависящая от стиля поля все еще. ekhumoros comment, затем поместите меня на правильный путь.
Короче говоря, полный размер виджета списка:
list.sizeHintForColumn(0) + 2 * list.frameWidth()
list.sizeHintForRow(0) * list.count() + 2 * list.frameWidth())
В соответствии с comment от Violet он не может работать в Qt 5.
Также имейте в виду, что при настройке размера содержимого вам не нужны полосы прокрутки, поэтому я отключу их.
Мой полный пример для QListWidget
, связанного с его размером содержимого:
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_()
Ответ 3
Чтобы эффективно использовать sizeHint, вы должны переопределить его, по крайней мере, на С++. По моему опыту, реализация по умолчанию для виджетов может быть довольно бесполезной, если вам нужно определенное поведение. Попытки заставить то, что вы хотите с помощью прокладок или макетов, заканчиваются катастрофой. Если вы можете получить из QListWidget и переопределить sizeHint, вы можете выполнять итерацию по вашим элементам и находить самую длинную строку, а затем делать какую-то магию, чтобы определить, насколько она должна быть.
Что бы я сделал, во всяком случае.
Ответ 4
Сначала вы должны получить свою самую большую строку в списке, которую легко получить.
После получения этой строки выполните следующие действия:
QFontMetrics * fm = new QFontMetrics(widget->font());
QRect rect;
rect = fm->boundingRect(string);
rect.width() имеет ширину в пикселях самой большой строки
rect.height() имеет высоту.
Установите ширину QListWidget равной ширине прямоугольника (плюс поля)
и высоту до этой высоты прямоугольника, умноженное на количество элементов
Я не тестировал код, но надеюсь, что он поместит вас на правильный трек
Ответ 5
QListWidget *valList;
valList = new QListWidget(this);
valList->setSizePolicy (QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
valList->setMinimumSize (QSize(1111, 111));
Ответ 6
Вам нужно получить QHeaderView вашего QListWidget и настроить его режим изменения размера.
Прочтите эту документацию для получения дополнительной информации
http://doc.qt.nokia.com/latest/qheaderview.html#ResizeMode-enum