PyQt: QStandardItemModel: как получить строку в виде списка?

#qt #pyqt

#qt #pyqt

Вопрос:

Как я могу получить строку из модели? Действительно ли необходимо проходить по строке и получать шаг за шагом каждый элемент?

Я использую эту функцию, она работает, но я не очень доволен этим. Есть ли лучший способ, как это сделать?

 def row(self, r):               
    row = []
    for c in range(self.columnCount()):
        index = self.index(r, c)
        value = self.data(index).toString()
        row.append(value)        
    return row
  

Ответ №1:

Поместить все в список для понимания:

 row = [self.data(self.index(r,c))
       for c in xrange(self.columnCount())]
  

вероятно, быстрее, хотя, конечно, не очень приятно читать.

Если вы хотите использовать модели, предоставляемые Qt — тогда да, это единственный способ получить доступ к базовым данным.

Вы могли бы использовать QStandardItemModel , что позволило бы вам сделать

 row = [self.item(r,c) for c in xrange(self.columnCount())]
  

однако это позволяет избежать необходимости создания индекса.

В зависимости от вашего варианта использования, вы, конечно, могли бы реализовать общие модели Qt на основе списков или dicts Python, которые позволили бы получать доступ к элементам способом Qt и способом python.