Я довольно неопытный с этим видом объекта в 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
Извините, но как мне их совместить? Я заметил, что доступ к методу rowCount после того, как фильтр изменил его значение (и это хорошо), но когда я пытаюсь использовать метод «.data», возникает ошибка метода. Я отредактирую сообщение с некоторым кодом, чтобы показать, что я делаю. – Rigel
Какая ошибка? Ваш код не содержит никаких методов использования данных. –
Извините, я все еще редактировал. Теперь это не ошибка (неправильный синтаксис: P), но теперь она выводит на консоль это: <объект PyQt4.QtCore.QVariant в 0x02F7B030> – Rigel