在QListWidget中动态创建Row

时间:2011-07-15 13:00:20

标签: qt qt4 pyqt

您好,

我想创建一个客户端小部件。请提出一些想法,请帮忙 我的目的是创建一个显示一些信息的Listwidget,当点击particulat行时,它必须通过在所选行的正下方创建一个新区域(行或文本编辑)来显示与该行相对应的详细信息,并将其他行拉到所选行下方在创建新区域后向下行 在附件中,当我单击行Nancy(将其视为行)时,她的详细信息将位于所选行的下方。请帮助解决这个问题

enter image description here

2 个答案:

答案 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解决方案仍然可以工作。