2013-12-17 7 views
1

Я довольно неопытный с этим видом объекта в Qt, и мне нужно знать, есть ли способ получить данные после фильтрации (для чего-то с ними, например, для экспорта в другой файл).QSortFilterProxyModel get Filtered Data

Ситуация такова: я получаю данные из базы данных и сохраняю ее в списке списка python, после чего создаю модель QTableView и инициализирую ее с помощью QSortFilterProxyModel, настроенного для хранения этих данных. В интерфейсе есть QLineEdit, связанный с методом setFilterRegExp, целью которого является поиск данных в QTableView.

Мне нужно создать кнопку (или что-то еще), которая записывает файл с данными, отображаемыми в настоящее время в графическом интерфейсе, но я не могу понять, как получить отображаемые в данный момент данные.

Благодарим за любые советы.

class recordsTableModel(QAbstractTableModel): 

def __init__(self, records, parent = None): 
    QAbstractTableModel.__init__(self, parent) 
    self.__records = records 

def rowCount(self, parent): 
    return len(self.__records) 

def columnCount(self, parent): 
    return len(self.__records[0]) 

def flags(self, index): 
    return Qt.ItemIsEnabled | Qt.ItemIsSelectable 

def data(self, index, role): 
    if role == Qt.DisplayRole: 
     row = index.row() 
     column = index.column() 
     value = self.__records[row][column] 

     return value 

def headerData(self, section, orientation, role): 
    if role == Qt.DisplayRole: 
     if orientation == Qt.Horizontal: 
      return self.__records[0]._fields[section] 

class AndroidDialog(QDialog, ui_android_dialog.Ui_androidDialog): 
def __init__(self, parent=None): 
    super(AndroidDialog, self).__init__(parent) 
    self.setupUi(self) 

    self.proxyModelContact = QSortFilterProxyModel(self) 
    self.proxyModelContact.setSourceModel(recordsTableModel(self.contacts)) 
    self.proxyModelContact.setFilterKeyColumn(-1) 
    self.proxyModelContact.setFilterCaseSensitivity(Qt.CaseInsensitive) 
    self.contactsTableView.setModel(self.proxyModelContact) 

    self.contactsExportToolButton.clicked.connect(self.printData) 

def printData(self): 
    print "%s" % self.proxyModelContact.rowCount() 
    print "%s" % self.proxyModelContact.data(self.proxyModelContact.index(0, 0)) 

за то, что я знаю, индекс должен указывать на элемент в модели (для меня стол), так с этим он должен напечатать первый элемент в первом столбце. Insteat печатает:
объект PyQt4.QtCore.QVariant на 0x02F7B030

ответ

1

Вы можете использовать rowCount, columnCount и data методы модели прикрепленным к представлению доступа отображаются данные. В вашем случае модель - QSortFilterProxyModel.

+0

Извините, но как мне их совместить? Я заметил, что доступ к методу rowCount после того, как фильтр изменил его значение (и это хорошо), но когда я пытаюсь использовать метод «.data», возникает ошибка метода. Я отредактирую сообщение с некоторым кодом, чтобы показать, что я делаю. – Rigel

+0

Какая ошибка? Ваш код не содержит никаких методов использования данных. –

+0

Извините, я все еще редактировал. Теперь это не ошибка (неправильный синтаксис: P), но теперь она выводит на консоль это: <объект PyQt4.QtCore.QVariant в 0x02F7B030> – Rigel