Динамически создавать строки в QListWidget - PullRequest
1 голос
/ 15 июля 2011

Привет,

Я хочу создать обычный виджет.Пожалуйста, помогите, предоставив некоторую идею.
Мое намерение состоит в том, чтобы создать Listwidget, который отображает некоторую информацию, и при нажатии на конкретную строку он должен показывать детали, соответствующие этой строке, создавая новую область (редактирование строки или текста) непосредственно подвыделенную строку и потяните остальные строки под выбранной строкой вниз после созданной новой области.
Во вложении, когда я щелкаю строку Нэнси (считаю ее строкой), ее данные располагаются ниже выбранной строки.Пожалуйста, помогите в этом

enter image description here

Ответы [ 2 ]

3 голосов
/ 15 июля 2011

То, что вы хотите использовать, это 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 голос
/ 16 июля 2011

Вы можете попробовать использовать пользовательский делегат для просмотра строк. Я полагаю, что делегаты знают, выбраны ли они. Используя это, вы обычно рисуете невыбранные строки и рисуете больше информации для выбранных строк. Проблема в том, что я не знаю, можно ли изменить размер виджета при выделении. Если нет, решение QTreeView все еще должно работать.

...