2014-10-05 6 views
8

Я пытаюсь создать QListWidget, в котором каждый элемент представляет собой простой виджет, содержащий текст и кнопку. Я использую следующее:Добавить QWidget в QListWidget

itemN = QtGui.QListWidgetItem() 
#Create widget 
widget = QtGui.QWidget() 
widgetText = QtGui.QLabel("I love PyQt!") 
widgetButton = QtGui.QPushButton("Push Me") 
widgetLayout = QtGui.QHBoxLayout() 
widgetLayout.addWidget(widgetText) 
widgetLayout.addWidget(widgetButton) 
widgetLayout.addStretch() 
widget.setLayout(widgetLayout) 
#Add widget to QListWidget funList 
funList.addItem(itemN) 
funList.setItemWidget(itemN, widget) 

Проблема в том, что ничего не появляется. Я получаю пустую строку, которую я могу перемещать с помощью моей клавиатуры, но она пустая. Когда виджет содержит только кнопка, это работает, так что это не так, как если бы кнопочка была сама по себе. Существуют ли ограничения по сложности виджетов, которые могут обрабатывать setItemWidget? Возможно, мне нужно выйти за пределы классов удобства, как это предлагается в некоторых связанных статьях ниже?

Похожих сообщения

pyqt adding a widget to a QListWidget
Обратите внимание на предыдущем посте имеет аналогичное название для меня, но, кажется, относительно слабо выраженного вопроса о сложной стилизации коды из QtDesigner (смешанной с некоторым пользовательским материалом) , Не совсем ясно, что на самом деле это вопрос, который должен был задавать человек. Хотя название делает его похожим на дубликат, вопрос (я молюсь) - нет.

Я бы сказал что-то подобное около this сообщение.

QListWidgetItem with Radio Button

QListView/QListWidget with custom items and custom item widgets

Adding Custom Widget to QListWidget in QT click issue in QT?

pyqt adding a widget to a QListWidget

http://www.qtcentre.org/threads/8660-Drawing-a-widget-in-QItemDelegate-s-paint-method

http://developer.nokia.com/community/discussion/showthread.php/211634-Adding-a-button-inside-QListWidgetItem

ответ

12

Попробуйте это:

itemN = QtGui.QListWidgetItem() 
#Create widget 
widget = QtGui.QWidget() 
widgetText = QtGui.QLabel("I love PyQt!") 
widgetButton = QtGui.QPushButton("Push Me") 
widgetLayout = QtGui.QHBoxLayout() 
widgetLayout.addWidget(widgetText) 
widgetLayout.addWidget(widgetButton) 
widgetLayout.addStretch() 

widgetLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize) 
widget.setLayout(widgetLayout) 
itemN.setSizeHint(widget.sizeHint())  

#Add widget to QListWidget funList 
funList.addItem(itemN) 
funList.setItemWidget(itemN, widget) 

Как вы можете видеть, что вам нужно setSizeConstraint на макете и setSizeHint пункта.

+0

это работает! Мне не очень ясно, что происходит. 1) Как только ограничение размера установлено, мне действительно нужно «setSizeHint» к элементу тоже? Это не означает, что 'setSizeHint' не меняет внешний вид моего графического интерфейса. 2) Почему мой размер подсказывал по умолчанию -1, -1 в первую очередь, и как это исправить 'SetFixedSize'? Почему он просто не исправляет его при неправильном значении (-1, -1). Какие-нибудь хорошие документы переходят на все эти вопросы? (Документы включают: http://qt-project.org/doc/qt-4.8/qt.html#SizeHint-enum и http://qt-project.org/doc/qt-4.8/qlayout.html#SizeConstraint- enum) – neuronet

+2

@neuronet 'QLayout :: SetFixedSize' Размер главного виджета установлен в' sizeHint(); 'он не может быть изменен вообще. Если вы не укажете размер подсказки, ваш виджет с меткой и кнопкой будет больше, чем элемент, поэтому он будет крайне уродлив и не правильный. – Chernobyl

+0

Принимая ответ, потому что он решил проблему, но определенно будет поддерживать всех, кто объясняет все это, чтобы вывести следующего человека за рамки культового программирования :) – neuronet

Смежные вопросы