用自定义控件填充QListWidget
我想创建一个包含很多项目的 QListView 或 QListWidget。我尝试过制作代理(delegates),也用过 setItemWidget 来设置小部件,但都遇到了困难。
下面这个是我在 QT Designer 中创建的,然后我有一个 UIC 文件,通过 uic.loadUi 在一个子类化的 QWidget 中加载。现在没有崩溃,但 listWidgetItems 是空的。
如果有人能帮忙就太好了。我会在下面继续尝试,所以我希望能动态加载 UIC。
可能会有成千上万的动画,所以如果能保持性能就更好了。
1 个回答
3
我本来想用委托来实现这个功能,但没成功。不过这里有一段代码,展示了如何使用从QtDesigner生成的自定义小部件,并通过setItemWidget方法把它加载到listView中:
import os, sys
import xml.etree.ElementTree as et
from PyQt4 import QtGui, QtCore, uic
class uiControlTest(QtGui.QMainWindow):
def __init__(self):
super(uiControlTest, self).__init__()
self.ui = uic.loadUi('uiControlTest.ui')
self.ui.show()
for i in range(0,300):
wid = animItemWidget()
wid.label_2.setText('Last edited by chrise @2014.06.21:23:17')
wid.label.setText('Animation ' + str(i) + ' ')
wid2 = QtGui.QListWidgetItem()
wid2.setSizeHint(QtCore.QSize(100, 40))
self.ui.list.addItem(wid2)
self.ui.list.setItemWidget(wid2, wid)
def awesomeButtonPressed():
print 'awesome!'
class animItemWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(animItemWidget, self).__init__()
self.horizontalLayout_4 = QtGui.QHBoxLayout(self)
self.horizontalLayout_4.setSpacing(2)
self.horizontalLayout_4.setMargin(3)
self.horizontalLayout_4.setObjectName(QtCore.QString.fromUtf8("horizontalLayout_4"))
self.verticalLayout_2 = QtGui.QVBoxLayout()
self.verticalLayout_2.setObjectName(QtCore.QString.fromUtf8("verticalLayout_2"))
self.label = QtGui.QLabel(self)
font = QtGui.QFont()
font.setPointSize(11)
font.setWeight(75)
font.setBold(True)
self.label.setFont(font)
self.label.setObjectName(QtCore.QString.fromUtf8("label"))
self.verticalLayout_2.addWidget(self.label)
self.pixMap02 = QtGui.QLabel(self)
self.pixMap02.setText(QtCore.QString.fromUtf8(""))
self.pixMap02.setObjectName(QtCore.QString.fromUtf8("pixMap02"))
self.verticalLayout_2.addWidget(self.pixMap02)
self.horizontalLayout_4.addLayout(self.verticalLayout_2)
self.verticalLayout = QtGui.QVBoxLayout()
self.verticalLayout.setObjectName(QtCore.QString.fromUtf8("verticalLayout"))
self.horizontalLayout = QtGui.QHBoxLayout()
self.horizontalLayout.setSpacing(2)
self.horizontalLayout.setObjectName(QtCore.QString.fromUtf8("horizontalLayout"))
self.pixMap01 = QtGui.QLabel(self)
self.pixMap01.setText(QtCore.QString.fromUtf8(""))
self.pixMap01.setObjectName(QtCore.QString.fromUtf8("pixMap01"))
self.horizontalLayout.addWidget(self.pixMap01)
spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem)
self.button02 = QtGui.QPushButton(self)
self.button02.setMaximumSize(QtCore.QSize(24, 24))
self.button02.setText(QtCore.QString.fromUtf8(""))
self.button02.setObjectName(QtCore.QString.fromUtf8("button02"))
self.horizontalLayout.addWidget(self.button02)
self.button01 = QtGui.QPushButton(self)
self.button01.setMaximumSize(QtCore.QSize(24, 24))
self.button01.setText(QtCore.QString.fromUtf8(""))
self.button01.setObjectName(QtCore.QString.fromUtf8("button01"))
self.horizontalLayout.addWidget(self.button01)
self.button04 = QtGui.QPushButton(self)
self.button04.setMaximumSize(QtCore.QSize(24, 24))
self.button04.setText(QtCore.QString.fromUtf8(""))
self.button04.setObjectName(QtCore.QString.fromUtf8("button04"))
self.horizontalLayout.addWidget(self.button04)
self.button03 = QtGui.QPushButton(self)
self.button03.setMaximumSize(QtCore.QSize(24, 24))
self.button03.setText(QtCore.QString.fromUtf8(""))
self.button03.setObjectName(QtCore.QString.fromUtf8("button03"))
self.horizontalLayout.addWidget(self.button03)
self.button05 = QtGui.QPushButton(self)
self.button05.setMaximumSize(QtCore.QSize(24, 24))
self.button05.setText(QtCore.QString.fromUtf8(""))
self.button05.setObjectName(QtCore.QString.fromUtf8("button05"))
self.horizontalLayout.addWidget(self.button05)
self.verticalLayout.addLayout(self.horizontalLayout)
self.horizontalLayout_3 = QtGui.QHBoxLayout()
self.horizontalLayout_3.setObjectName(QtCore.QString.fromUtf8("horizontalLayout_3"))
self.label_2 = QtGui.QLabel(self)
self.label_2.setObjectName(QtCore.QString.fromUtf8("label_2"))
self.horizontalLayout_3.addWidget(self.label_2)
self.verticalLayout.addLayout(self.horizontalLayout_3)
self.horizontalLayout_4.addLayout(self.verticalLayout)
self.connect(self.button02, QtCore.SIGNAL("clicked()"), self.awesome)
def awesome(self):
print self.label.text() + ' is awesome!'
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
win = uiControlTest()
sys.exit(app.exec_())