您好,
我想创建一个客户端小部件。请提出一些想法,请帮忙 我的目的是创建一个显示一些信息的Listwidget,当点击particulat行时,它必须通过在所选行的正下方创建一个新区域(行或文本编辑)来显示与该行相对应的详细信息,并将其他行拉到所选行下方在创建新区域后向下行 在附件中,当我单击行Nancy(将其视为行)时,她的详细信息将位于所选行的下方。请帮助解决这个问题
答案 0 :(得分:3)
您想要使用的是QTreeView。它能够显示带有文本和图标的行。 您需要为表定义QStandardItemModel,这将为其提供列定义。
以下是我为类似应用程序编写的类中的三个相关函数。请注意,我不需要在我的行中使用任何图像,因此您必须自己确定该部分。
def drawPeopleListBox(self):
header = ["Picture","First Name","Last Name","Title","Address", "City", "Region"]
self.model = QStandardItemModel(0, len(header), self)
for i in range(len(header):
self.model.setHeaderData(i, Qt.Horizontal, self.selectionDict[i+1].upper())
self.itemList = QTreeView()
self.itemList.setRootIsDecorated(False)
self.itemList.setAlternatingRowColors(True)
self.itemList.setSortingEnabled(False)
self.itemList.setModel(self.model)
self.itemList.NoEditTriggers=True
#self.itemList.clicked[QModelIndex].connect(self.onRowClick)
self.itemList.clicked.connect(self.onRowClick)
self.itemList.setCursor(Qt.PointingHandCursor)
self.itemList.setColumnWidth(0,70)
self.itemList.setColumnWidth(1,140)
self.itemList.setColumnWidth(2,70)
self.itemList.setColumnWidth(3,180)
self.itemList.setColumnWidth(4,100)
self.itemList.setColumnWidth(5,100)
self.itemList.setColumnWidth(6,100)
self.populateList(self.userDataList)
def populateList(self, userDataList):
row=[]
for user in userDataList:
for attrib in user:
row.append(QStandardItem(attrib))
for item in row:
item.setEditable(False)
self.model.appendRow(row)
def onRowClick(self, index):
print index.row()
'''
Here you need to resize the clicked row height. Also resise the image.
Or insert another row that matches your design requirement.
self.model.insertRow(rowNumber, listOfQStandardItems)
'''
self.repaint()
答案 1 :(得分:1)
您可能想尝试使用自定义委托来查看行。我相信代表们知道他们是否被选中。使用此方法,您可以正常绘制未选择的行,并为选定的行绘制更多信息。这个问题是我不知道你是否可以在选择时调整小部件的大小。如果没有,QTreeView解决方案仍然可以工作。